2012-08-24 12 views
23

से कुकी को हटाने के लिए:
Delete cookie on clicking sign outसंभव डुप्लिकेट नेट

मैं जब उपयोगकर्ता लॉगआउट कुकी हटा दे।

यहाँ मेरी कोड है:

if (HttpContext.Current.Request.Cookies["currentUser"] != null) 
{ 
    DeleteCookie(HttpContext.Current.Request.Cookies["currentUser"]); 
} 


     public void DeleteCookie(HttpCookie httpCookie) 
     { 
      try 
      { 
       httpCookie.Value = null; 
       httpCookie.Expires = DateTime.Now.AddMinutes(-20); 
       HttpContext.Current.Request.Cookies.Add(httpCookie); 
      } 
      catch (Exception ex) 
      { 
       throw (ex); 
      } 
     } 

लेकिन यह काम नहीं करता। क्या आपके पास कोई सुझाव है?

+0

मेरा मानना ​​है कि आपको 'मान' को साफ़ नहीं करना चाहिए। AFAIK, इस तरह कुकी की पहचान की जाती है। –

+0

ध्यान दें कि कुकी को हटाने से केवल एक माध्यमिक सफाई होती है। महत्वपूर्ण हिस्सा सर्वर के पक्ष में कुकी के मान को अमान्य कर रहा है। – CodesInChaos

उत्तर

48
HttpCookie currentUserCookie = HttpContext.Current.Request.Cookies["currentUser"]; 
HttpContext.Current.Response.Cookies.Remove("currentUser"); 
currentUserCookie.Expires = DateTime.Now.AddDays(-10); 
currentUserCookie.Value = null; 
HttpContext.Current.Response.SetCookie(currentUserCookie); 

यह काम करता है।

+1

मुझे पता है कि यह एक पुराना जवाब है, लेकिन नए आने वालों के लिए, मुझे नहीं लगता कि कुकी को हटाने से पहले कुछ भी उपयोगी होता है, क्योंकि यह किसी भी तरह बाद में सेट होता है। –

0

कुकी (पिछले समाप्ति के साथ) को HttpContext.Current.Response.Cookies संग्रह में जोड़ें। सर्वर को भेजे गए कुकीज़ को पढ़ने के लिए अनुरोध है - प्रतिक्रिया क्लाइंट को कुकीज़ भेजने के लिए है।

14

इसके बजाय कुकी को जोड़ने का है, तो आप Response's कुकीज़ Expires एक मूल्य के अतीत में बदलना चाहिए:

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

Sidenote: throw ex के बजाय आप सिर्फ throw यह स्टैकट्रेस है रखने के लिए करना चाहिए। C#: Throwing Custom Exception Best Practices

+0

अगर किसी के साथ कुछ भी नहीं किया जाता है तो अपवाद को क्यों पकड़ें? – Dykam

+0

मैंने कोशिश की लेकिन यह काम नहीं करता है। फिर भी मैं लॉगआउट के बाद उपयोगकर्ता नाम देख सकता हूं। httpCookie.Expires = DateTime.Now.AddDays (-1); – cagin

+0

@ डिकम: आप इसे बाद में लॉग इन करने या जो कुछ भी चाहते हैं उसे करने का निर्णय ले सकते हैं। मैं अक्सर पहले संस्करण में 'TODO: लॉगिंग लागू करें' जोड़ता हूं। इस तरह आपने याद रखने के लिए कम से कम कोशिश/पकड़ जोड़ा है कि इससे अपवाद हो सकता है। –

0

शायद आप Response.Cookies.Clear() या Response.Cookies.Remove() का उपयोग कर सकते हैं।

+0

यह काम नहीं करता है। – cagin

+1

क्षमा करें ... मैंने एक त्वरित खोज की और पाया कि यह http://msdn.microsoft.com/en-us/library/ms178195.aspx हो सकता है कि यह आपके लिए उपयोगी हो। –

+0

जैसा कि आप मेरे प्रश्न में देख सकते हैं, मैंने कुकी के समाप्ति समय को पहले ही सेट कर दिया है। लेकिन एक ही परिणाम। – cagin