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

Dav*_*vid 55 c# cookies asp.net-mvc-3

好吧,所以我真的认为我这样做是正确的,但饼干没有被清除.

 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");
Run Code Online (Sandbox Code Playgroud)

当重定向发生时,它再次找到cookie并继续前进,就好像我从未注销过一样.有什么想法吗?

Met*_*urf 105

你很亲密 您需要使用Response对象写回浏览器:

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

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

  • 呸! 不敢相信我的反应和请求混淆了.谢谢你的帮助!大卫 (9认同)
  • @VikasRana现在自驾车是一件大事. (2认同)

Kei*_*thS 9

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

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


Ale*_*lex 5

我这样做了,它用于清除(而不是删除)会话 cookie:

HttpContext.Response.Cookies.Set(new HttpCookie("cookie_name"){Value = string.Empty});
Run Code Online (Sandbox Code Playgroud)

基于 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);
}
Run Code Online (Sandbox Code Playgroud)