ASP.NET वेबसाइट पर कुकीज़ कैसे हटाएं


87

मेरी वेबसाइट में जब उपयोगकर्ता "लॉगआउट" बटन पर क्लिक करता है, तो लॉगआउट.स्पेक्स पृष्ठ कोड के साथ लोड होता है Session.Clear()

ASP.NET/C# में, क्या यह सभी कुकीज़ को साफ़ करता है? या क्या कोई अन्य कोड है जिसे मेरी वेबसाइट के सभी कुकीज़ को हटाने के लिए जोड़ा जाना चाहिए?

जवाबों:


149

कुछ इस तरह की कोशिश करो:

if (Request.Cookies["userId"] != null)
{
    Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);   
}

लेकिन यह भी उपयोग करने के लिए समझ में आता है

Session.Abandon();

इसके अलावा कई परिदृश्यों में।


15
Session.AbandonASP.NET सत्र कुकी को साफ़ कर देगा, लेकिन आपके द्वारा उपयोगकर्ता की तरह कुकीज़ को मैन्युअल रूप से सेट नहीं किया जाएगा। और Cookies["whatever"]कभी अशक्त नहीं होता; यदि आप किसी गैर-मौजूद व्यक्ति से पूछते हैं तो ढांचा एक कुकी बनाएगा।
एंडोमर

11
@Andomar, Cookies["whatever"]कुकी के मौजूद न होने पर वास्तव में अशक्त हो जाता है! मुझे पता है कि यह एक पुरानी टिप्पणी है लेकिन मैं नहीं चाहता कि अन्य पाठक इस टिप्पणी से गुमराह हों।
नूनो एगापिटो सेप

6
यह भी बहुत महत्वपूर्ण है कि Expiresयह सेट नहीं है DateTime.MinValueक्योंकि यह वास्तव में कुकी को एक सत्र की समाप्ति देगा, जिसका अर्थ है कि यह कुकी को हटाने से पहले ब्राउज़र / टैब (ब्राउज़र पर निर्भर) के बंद होने तक इंतजार करता है।
नैशनास

7
@NunoAgapito बहुत पुराना है, लेकिन अन्य उपयोगकर्ताओं के लिए, कुकीज़ ["जो भी"] यदि आप "रिक्वेस्ट" से पढ़ते हैं और यदि आप "रिस्पांस" से पढ़ते हैं तो एक खाली कुकी लौटाते हैं।
अथिवात चूनलखान

लेकिन यह केवल कुकी से सामग्री को निकालता है, कुकी अभी भी कम से कम मेरे लिए ब्राउज़र में बनी हुई है
बीटीनिन

50

नहीं, उनमें से प्रत्येक के लिए समाप्ति तिथि निर्धारित करके कुकीज़ को साफ किया जा सकता है।

if (Request.Cookies["UserSettings"] != null)
{
    HttpCookie myCookie = new HttpCookie("UserSettings");
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
}

के क्षण में Session.Clear():

  • Sessionसंग्रह से सभी प्रमुख-मूल्य जोड़े हटा दिए जाते हैं। Session_Endघटना नहीं हुई है।

यदि आप लॉगआउट के दौरान इस विधि का उपयोग करते हैं, तो आपको ईवेंट के लिए Session.Abandonविधि का भी उपयोग करना चाहिए Session_End:

  • सत्र आईडी के साथ कुकी (यदि आपका एप्लिकेशन सत्र आईडी स्टोर के लिए कुकीज़ का उपयोग करता है, जो डिफ़ॉल्ट रूप से है) हटा दिया गया है

समाप्ति की तारीख के बारे में सही है, लेकिन मेरा मानना ​​है कि ifलाइन वास्तव में काम नहीं करती है। जब आप Cookies["whatever"]फ्रेमवर्क के साथ कुकी मांगते हैं तो यह कुकी नहीं बनेगी यदि यह मौजूद नहीं है।
एंडोमर

@Andomar यह कोड मुझे MSDN से मिला है। मुझे नहीं लगता कि अगर हम Requestऑब्जेक्ट कहते हैं तो यह एक कुकी बनाएगा ।
VMAtm

2
अहा, ऐसा लगता है कि यह केवल Responseवस्तु के लिए एक कुकी बनाता है । दिलचस्प :)
एंडोमर

3
इस कोड को सिर्फ एक लाइन में ऑप्टिमाइज़ किया जा सकता है Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1)। यहां सर्वर ब्राउजर से कुकी को हटाने का अनुरोध करेगा। यदि यह मौजूद है तो ब्राउज़र इसे हटा देगा।
शाश्वत

2
मेरे लिए हाँ, मुझे Response.Cookies.dd (myCookie) भाग की आवश्यकता थी - इसके बिना यह हमेशा / सही ढंग से काम नहीं करता है। धन्यवाद।
क्रिस्टोफर डी। एमर्सन

28

यही है वह जो मेरे द्वारा उपयोग किया जाता है:

    private void ExpireAllCookies()
    {
        if (HttpContext.Current != null)
        {
            int cookieCount = HttpContext.Current.Request.Cookies.Count;
            for (var i = 0; i < cookieCount; i++)
            {
                var cookie = HttpContext.Current.Request.Cookies[i];
                if (cookie != null)
                {
                    var expiredCookie = new HttpCookie(cookie.Name) {
                        Expires = DateTime.Now.AddDays(-1),
                        Domain = cookie.Domain
                    };
                    HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
                }
            }

            // clear cookies server side
            HttpContext.Current.Request.Cookies.Clear();
        }
    }

बहुत बहुत धन्यवाद! मेरी समस्या से भी छुटकारा मिल गया कि कुकी सर्वर साइड को अपडेट नहीं करेगी
टॉम एल सफादी

11

दुर्भाग्य से, मेरे लिए, "एक्सपायर" सेट करना हमेशा काम नहीं करता था। कुकी अप्रभावित थी।

इस कोड ने मेरे लिए काम किया:

HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

"ASP.NET_SessionId"कुकी का नाम कहां है यह वास्तव में कुकी को हटाता नहीं है, लेकिन इसे एक खाली कुकी के साथ ओवरराइड करता है, जो मेरे लिए काफी करीब था।


5

मैं केवल यह बताना चाहता हूं कि सत्र आईडी कुकी को सत्र का उपयोग करते समय हटाया नहीं जाता है। और जैसा कि अन्य ने कहा है।

जब आप किसी सत्र को छोड़ देते हैं, तो सत्र आईडी कुकी को उपयोगकर्ता के ब्राउज़र से हटाया नहीं जाता है। इसलिए, जैसे ही सत्र को छोड़ दिया गया है, उसी आवेदन के किसी भी नए अनुरोधों में उसी सत्र आईडी का उपयोग किया जाएगा, लेकिन नए सत्र का उदाहरण होगा। उसी समय, यदि उपयोगकर्ता उसी DNS डोमेन के भीतर एक और एप्लिकेशन खोलता है, तो उपयोगकर्ता को एबंड विधि के एक आवेदन से बुलाए जाने के बाद अपना सत्र राज्य नहीं खोएगा।

कभी-कभी, आप सत्र आईडी का पुन: उपयोग नहीं करना चाह सकते हैं। यदि आप करते हैं और यदि आप सत्र आईडी का पुन: उपयोग नहीं करने के प्रभावों को समझते हैं, तो सत्र को छोड़ने के लिए और सत्र ID कुकी को खाली करने के लिए निम्न कोड उदाहरण का उपयोग करें:

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

यह कोड उदाहरण सर्वर से सत्र स्थिति को साफ़ करता है और सत्र राज्य कुकी को शून्य पर सेट करता है। अशक्त मूल्य ब्राउज़र से कुकी को प्रभावी ढंग से साफ़ करता है।

http://support.microsoft.com/kb/899918


5

यह अब 2018 है, इसलिए ASP.NET कोर में, फ़ंक्शन में एक सीधा आगे बनाया गया है। कुकी को हटाने के लिए इस कोड को आज़माएं:

if(Request.Cookies["aa"] != null)
{
    Response.Cookies.Delete("aa");
}
return View();

4

आपको कभी भी कुकी के रूप में पासवर्ड स्टोर नहीं करना चाहिए। कुकी को हटाने के लिए, आपको वास्तव में इसे संशोधित और समाप्त करने की आवश्यकता है। आप वास्तव में इसे हटा नहीं सकते, अर्थात, इसे उपयोगकर्ता की डिस्क से हटा सकते हैं।

यहाँ एक नमूना है:

HttpCookie aCookie;
    string cookieName;
    int limit = Request.Cookies.Count;
    for (int i=0; i<limit; i++)
    {
        cookieName = Request.Cookies[i].Name;
        aCookie = new HttpCookie(cookieName);
        aCookie.Expires = DateTime.Now.AddDays(-1); // make it expire yesterday
        Response.Cookies.Add(aCookie); // overwrite it
    }

2

सभी कुकीज़ को हटाने के रूप में ओपी के प्रश्न का शीर्षक लेते हुए - "वेबसाइट में कुकीज़ हटाएं"

मैं कहीं वेब पर डेव डोमगाला से कोड भर आया। मैंने Google Analytics कूकीज़ की अनुमति देने के लिए डेव को संपादित किया - जो वेबसाइट पर पाए गए सभी कुकीज़ के माध्यम से लूप किया और उन सभी को हटा दिया। (डेवलपर कोण से - किसी मौजूदा साइट में नए कोड को अपडेट करना, उपयोगकर्ताओं को साइट को फिर से दिखाने के साथ समस्याओं से बचने के लिए एक अच्छा स्पर्श है)।

मैं नीचे दिए गए कोड का उपयोग कुकीज़ को पढ़ने के साथ पहले करता हूं, किसी भी आवश्यक डेटा को पकड़ता हूं - फिर नीचे के लूप से सब कुछ साफ करने के बाद कुकीज़ को रीसेट करना।

कोड:

int limit = Request.Cookies.Count; //Get the number of cookies and 
                                   //use that as the limit.
HttpCookie aCookie;   //Instantiate a cookie placeholder
string cookieName;   

//Loop through the cookies
for(int i = 0; i < limit; i++)
{
 cookieName = Request.Cookies[i].Name;    //get the name of the current cookie
 aCookie = new HttpCookie(cookieName);    //create a new cookie with the same
                                          // name as the one you're deleting
 aCookie.Value = "";    //set a blank value to the cookie 
 aCookie.Expires = DateTime.Now.AddDays(-1);    //Setting the expiration date
                                                //in the past deletes the cookie

 Response.Cookies.Add(aCookie);    //Set the cookie to delete it.
}

अतिरिक्त: यदि आप Google Analytics का उपयोग करते हैं

उपरोक्त लूप / डिलीट साइट के लिए सभी कुकीज़ हटा देगा, इसलिए यदि आप Google Analytics का उपयोग करते हैं - तो शायद यह __utmz कुकी पर पकड़ के लिए उपयोगी होगा क्योंकि यह एक नज़र रखता है कि आगंतुक कहाँ से आया था, क्या खोज इंजन का उपयोग किया गया था, क्या लिंक पर क्लिक किया गया था, कि आपकी वेबसाइट एक्सेस होने पर कौन से कीवर्ड का उपयोग किया गया था, और वे दुनिया में कहां थे।

तो इसे रखने के लिए, कुकी के नाम से जाने के बाद एक साधारण विवरण को लपेटें:

... 
aCookie = new HttpCookie(cookieName);    
if (aCookie.Name != "__utmz")
{
    aCookie.Value = "";    //set a blank value to the cookie 
    aCookie.Expires = DateTime.Now.AddDays(-1);   

    HttpContext.Current.Response.Cookies.Add(aCookie);    
}

1

हालांकि यह एक पुराना धागा है, मैंने सोचा कि अगर कोई अभी भी भविष्य में समाधान खोज रहा है।

HttpCookie mycookie = new HttpCookie("aa");
mycookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(mycookie1);

Thats मेरे लिए क्या चाल है।



0

आपको कुकीज़ हटाने के लिए समाप्ति तिथि निर्धारित करनी होगी

Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));

अगर कुकी मौजूद नहीं है तो यह अपवाद नहीं होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.