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

问题描述 投票:0回答:4

好的,所以我真的认为我这样做是正确的,但是cookies没有被清除。

 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 并继续前进,就像我从未注销一样。有什么想法吗?

c# cookies asp.net-mvc-3
4个回答
107
投票

你很接近了。您需要使用 Response 对象写回浏览器:

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

有关 MSDN 的更多信息,如何:删除 Cookie


9
投票

Cookie 存储在客户端,而不是服务器,因此 Session.Clear 不会影响它们。此外,Request.Cookies 由 IIS 填充,并随每个页面请求提供给您的页面;从该集合中添加/删除 cookie 不会执行任何操作。

尝试对 Response.Cookies 执行类似的操作。这应该会导致您的客户端用新 cookie 覆盖旧 cookie,从而导致其过期。


5
投票

我这样做了,它可以清除(而不是删除)会话 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);
}

0
投票
Response.Cookies.Delete("MyCookie")

我不知道这是在哪个版本添加的,但它有效。

© www.soinside.com 2019 - 2024. All rights reserved.