簡體   English   中英

你如何使用asp.net mvc 3和c#清除cookie?

[英]How do you clear cookies using asp.net mvc 3 and c#?

好吧,所以我真的認為我這樣做是正確的,但餅干沒有被清除。

 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並繼續前進,就好像我從未注銷過一樣。 有什么想法嗎?

你很親密 您需要使用Response對象寫回瀏覽器:

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

有關MSDN的更多信息, 如何:刪除Cookie

Cookie存儲在客戶端而不是服務器上,因此Session.Clear不會影響它們。 此外,Request.Cookies由IIS填充,並隨每個頁面請求一起提供給您的頁面; 從該集合添加/刪除cookie不會做任何事情。

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

我做了這個,它用於清除(不刪除)會話cookie:

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

根據Metro的響應,我創建了這個擴展方法,使代碼可以在任何控制器中重用。

/// <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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM