আপনি কীভাবে জাভা সার্লেলে কোনও কুকি সরিয়ে ফেলবেন


135

আপনি কীভাবে জাভা সার্লেলে একটি কুকি অপসারণ করবেন?

আমি এটি চেষ্টা করেছি: http://www.jguru.com/faq/view.jsp?EID=42225

সম্পাদনা: নিম্নলিখিতটি এখন সফলভাবে কাজ করে এটি এর সংমিশ্রণ হিসাবে উপস্থিত বলে মনে হচ্ছে:

response.setContentType("text/html");

এবং

cookie.setMaxAge(0);

আমি করার আগে:

//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(-1);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);

যা ডকুমেন্টেশন অনুসারে ব্রাউজারটি বন্ধ হয়ে গেলে কুকির মেয়াদোত্তীর্ণ হয় ।

একটি নেতিবাচক মান মানে কুকি অবিচ্ছিন্নভাবে সংরক্ষণ করা হয় না এবং ওয়েব ব্রাউজার থেকে প্রস্থান করা হবে মুছে ফেলা হবে। একটি শূন্য মান কুকি মুছে ফেলার কারণ।

একটি কুকির মেয়াদ শেষ করার জন্য পূর্ণ কার্যকারী স্নিপেটটি হ'ল:

//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);

উত্তর:


137

-1 এর ম্যাক্সএজ সিগন্যাল যে আপনি কুকিটি সেশনের সময়কাল ধরে রাখতে চান। আপনি এর পরিবর্তে ম্যাক্সএজ 0 তে সেট করতে চান।

থেকে এপিআই ডকুমেন্টেশন :

একটি নেতিবাচক মান মানে কুকি অবিচ্ছিন্নভাবে সংরক্ষণ করা হয় না এবং ওয়েব ব্রাউজার থেকে প্রস্থান করা হবে মুছে ফেলা হবে। একটি শূন্য মান কুকি মুছে ফেলার কারণ।

9
আমি প্রাথমিকভাবে ফায়ারফক্সে সেটম্যাক্স (0) চেষ্টা করেছিলাম কিন্তু এখনও আমি এটি আমার কুকিগুলিতে "মেয়াদ শেষ: সেশনের শেষে" হিসাবে তালিকাভুক্ত দেখেছি এবং ভেবেছিলাম যে আমার সার্লেটটি এখনও সেই মেয়াদোত্তীর্ণ কুকি পাচ্ছে। প্রতিক্রিয়া.সেট কনটেন্টটাইপ ("পাঠ্য / এইচটিএমএল") সেট করার দরকার হতে পারে এটি একটি কম্বো; এবং setMaxAge (0); এটি শেষ পর্যন্ত কাজ করে তোলে। আমি এটি আবার চেষ্টা করেছি এবং মনে হচ্ছে সেটাম্যাক্সএজ (0) সহ কুকি আমার জাভা সার্লেটগুলিতে পরবর্তী অনুরোধগুলিতে প্রেরণ করা হবে না।
ডগনুকেম

62

আমার পরিবেশে, নিম্নলিখিত কোডগুলি কাজ করে। যদিও প্রথম নজরে অপ্রয়োজনীয় দেখায়, cookies[i].setValue("");এবং cookies[i].setPath("/");কুকিটি সঠিকভাবে সাফ করার জন্য প্রয়োজনীয়।

private void eraseCookie(HttpServletRequest req, HttpServletResponse resp) {
    Cookie[] cookies = req.getCookies();
    if (cookies != null)
        for (Cookie cookie : cookies) {
            cookie.setValue("");
            cookie.setPath("/");
            cookie.setMaxAge(0);
            resp.addCookie(cookie);
        }
}

1
এটি সমস্ত ব্রাউজার জুড়ে ধারাবাহিকভাবে কাজ করে বলে মনে হচ্ছে।
ug_

5
আমি নিশ্চিত নই যে আপনার কুকির মান বা পথ নির্ধারণ করা উচিত কারণ এটিকে অন্য কোনও কুকি হিসাবে দেখা যেতে পারে, তাই না? একটি কুকি সাফ করার জন্য আপনার সর্বাধিক বয়স নির্ধারণ করা উচিত 0
গ্রে

2
কুকি.সেটপথ (...) কুকি তৈরি হওয়ার সময় যে কোনও পাথ ব্যবহার করা হত (কুকির নাম এবং ডোমেনের জন্য একই) মেলাতে হবে।
মার্কাস

12

মনে রাখবেন যে একটি কুকি আসলে এর নাম, পথ এবং ডোমেনের টিপল দিয়ে সংজ্ঞায়িত করা হয়েছে। যদি এই তিনটির মধ্যে যে কোনও একটি পৃথক হয় বা একই নামের একাধিক কুকি রয়েছে তবে তবে যে রাস্তাগুলি / ডোমেনগুলি এখনও প্রশ্নযুক্ত URL এর জন্য দৃশ্যমান হতে পারে তা দিয়ে সংজ্ঞায়িত করা হয়েছে, আপনি এখনও সেই কুকিটি অনুরোধে পাস করেছেন দেখতে পাবেন। উদাহরণস্বরূপ, যদি url " http://foo.bar.com/baz/index.html " হয়, আপনি বার ডটকম বা foo.bar.com এ সংজ্ঞায়িত কোনও কুকিজ দেখতে পাবেন বা "/" বা একটি পথ সহ "/ বায"।

সুতরাং, আপনার দেখতে যা দেখায় এটির মতো কাজ করা উচিত, যতক্ষণ না ক্লায়েন্টে কেবলমাত্র একটি কুকি সংজ্ঞায়িত হয়, "SSO_COOKIE_NAME", ডোমেন "SSO_DOMAIN", এবং "/" নাম সহ। যদি বিভিন্ন পাথ বা ডোমেন সহ কোনও কুকিজ থাকে তবে আপনি ক্লায়েন্টকে পাঠানো কুকিটি দেখতে পাবেন।

এটি ডিবাগ করতে, ফায়ারফক্সের পছন্দসমূহ -> সুরক্ষা ট্যাবে যান এবং এসএসও_সিওকিআইএইচ দিয়ে সমস্ত কুকিজ অনুসন্ধান করুন। ডোমেন এবং পথ দেখতে প্রতিটি ক্লিক করুন। আমি বাজি ধরছি আপনি সেখানে এমন একটি পাবেন যা আপনি প্রত্যাশা করছেন না।


যদিও এটি এমনও হতে পারে যে নাম বা পথটি তিনি ব্রাউজারটিতে যে কুকিটি দেখছেন তার নয় (একবার তিনি ম্যাক্সএজ মানটি সংশোধন করে), অন্য কুকিজের উপস্থিতি বা অনুপস্থিতির রাষ্ট্র, উপস্থিতি বা অনুপস্থিতির কোনও সম্পর্ক নেই While তিনি যে নির্দিষ্ট কুকিটি সেট করছেন।
সিজেএস

8
Cookie[] cookies = request.getCookies();
if(cookies!=null)
for (int i = 0; i < cookies.length; i++) {
 cookies[i].setMaxAge(0);
}

এটা কি কাজ করে না? প্রতিক্রিয়া ফেরত পাঠানো হলে এটি সমস্ত কুকিজ সরিয়ে দেয়।


15
প্রতিক্রিয়াতে পরিবর্তিত কুকিটি পুনরায় প্রতিক্রিয়াতে যুক্ত করতে ভুলবেন না .এডকুকি (কুকিজ [i]);
ফিলিহপ বুসবি

7

এটি কোড যা আমি কার্যকরভাবে আগে ব্যবহার করেছি, "/"স্ট্রাপথ প্যারামিটার হিসাবে পাস করছি।

public static Cookie eraseCookie(String strCookieName, String strPath) {
    Cookie cookie = new Cookie(strCookieName, "");
    cookie.setMaxAge(0);
    cookie.setPath(strPath);

    return cookie;
}

0

একটি বিশেষ কেস: একটি কুকির কোনও পথ নেই।

এই ক্ষেত্রে পথ নির্ধারণ করুন cookie.setPath(request.getRequestURI())

জাভাস্ক্রিপ্ট পথ ছাড়াই কুকি সেট করে তাই ব্রাউজারটি কেবলমাত্র বর্তমান পৃষ্ঠার জন্য কুকি হিসাবে দেখায়। যদি আমি path == /ব্রাউজারের সাথে মেয়াদোত্তীর্ণ কুকি প্রেরণের চেষ্টা করি তবে দুটি কুকি দেখায়: একটির সাথে মেয়াদ উত্তীর্ণ হয়েছে path == /এবং অন্যটি দিয়ে path == current page

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.