2012-08-24 18 views
23

刪除Cookie可能重複:
Delete cookie on clicking sign out如何從淨

我想,當用戶註銷刪除Cookie。

這裏是我的代碼:

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,這就是cookie的識別方式。 –

+0

請注意,刪除cookie只是輔助清理。重要的部分是使服務器端cookie的值無效。 – 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

我知道這是一個古老的答案,但對於新手來說,我不認爲首先移除cookie會做任何有用的事情,因爲無論如何它會再次被設置。 –

0

將Cookie(過去的到期日期)添加到HttpContext.Current.Response.Cookies集合中。請求用於讀取服務器發送的cookie - 響應用於將cookie發送回客戶端。

14

而不是添加的cookie,你應該Expires改變Response's餅乾的價值在過去:

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

旁註:與其throw ex你應該只throw它來保持它的堆棧跟蹤。 C#: Throwing Custom Exception Best Practices

+0

無論如何,如果沒有做任何事情,爲什麼要捕捉異常? – Dykam

+0

我試過了,但它不起作用。仍然可以在註銷後看到用戶名。 httpCookie.Expires = DateTime.Now.AddDays(-1); – cagin

+0

@Dykam:您可以稍後決定是否登錄或做任何你想做的事情。我經常在第一個版本中添加一個「TODO:實現日誌記錄」。在這種方式下,您至少添加了try/catch來記住這可能會導致異常。 –

0

也許你可以使用Response.Cookies.Clear()或Response.Cookies.Remove()。

+0

它不起作用。 – cagin

+1

對不起...我做了一個快速搜索,發現這http://msdn.microsoft.com/en-us/library/ms178195.aspx 這可能是有用的你。 –

+0

正如您在我的問題中所看到的,我已經將Cookie的到期時間設置爲過去。但結果相同。 – cagin