2011-02-25 51 views
49

好吧,所以我真的認爲我正在做這件事,但餅乾沒有被清除。如何使用asp.net mvc 3和c#清除cookie?

Session.Clear(); 
HttpCookie c = Request.Cookies["MyCookie"]; 
if (c != null) 
{ 
    c = new HttpCookie("MyCookie"); 
    c["AT"] = null; 
    c.Expires = DateTime.Now.AddDays(-1); 
    Request.Cookies.Add(c); 
} 

return RedirectToAction("Index", "Home"); 

當重定向發生時,再次發現的cookie和好像我從來沒有退出移動上。有什麼想法嗎?

回答

96

你很近。你需要使用Response對象寫回瀏覽器:在MSDN上,How to: Delete a Cookie

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

更多信息。

+7

Bah!不能相信我得到了迴應和請求混淆。 感謝您的幫助! David – David 2011-02-25 21:14:18

+0

2017年有什麼新東西? – 2017-07-22 06:12:21

+1

@VikasRana現在自駕車是一件大事。 – 2017-09-25 12:28:20

9

Cookie存儲在客戶端,而不是服務器上,因此Session.Clear不會影響它們。此外,Request.Cookies由IIS填充,並在每次請求頁面時將其提供給頁面;添加/刪除該集合中的一個cookie什麼也不做。

嘗試對Response.Cookies執行類似操作。這會導致你的客戶用新的cookie覆蓋舊的cookie,導致它過期。

4

我這樣做,它的工作清除(不刪除)會話cookie:

HttpContext.Response.Cookies.Set(new HttpCookie("cookie_name"){Value = string.Empty}); 

基於地鐵的迴應我創造了這個擴展方法,使在任何控制器的代碼重用。

/// <summary> 
/// Deletes a cookie with specified name 
/// </summary> 
/// <param name="controller">extends the controller</param> 
/// <param name="cookieName">cookie name</param> 
public static void DeleteCookie(this Controller controller, string cookieName) 
{ 
    if (controller.HttpContext.Request.Cookies[cookieName] == null) 
      return; //cookie doesn't exist 

    var c = new HttpCookie(cookieName) 
       { 
        Expires = DateTime.Now.AddDays(-1) 
       }; 
    controller.HttpContext.Response.Cookies.Add(c); 
} 
+0

嘗試了幾件事情,只有擁有AuthorizationContext,並且您的解決方案終於可以工作 – CodingYourLife 2014-12-22 01:47:47