如何在asp.net MVC 4中手动删除cookie

36

我需要手动删除认证cookie(而不是使用FormsAuthentication.SignOut,由于某些原因它无法正常工作)。我尝试过

System.Web.HttpContext.Request.Cookies.Remove(cookieName); // for example .ASPXAUTH
System.Web.HttpContext.Response.Cookies.Remove(cookieName); // for example .ASPXAUTH
FormsAuthentication.SignOut(); // I don't know why this one does not work

这两个命令都不起作用。实际上,响应cookie为空,请求cookie包含我想要删除的cookie。当执行下面的命令时,它不再包含我删除的cookie,但在浏览器中cookie仍然存在,我甚至可以在退出登录后执行授权用户才能执行的操作。


这个回答解决了你的问题吗?如何在MVC网站中删除所有当前域的cookie? - David Buck
调用Cookies集合的Remove方法会从服务器端的集合中删除cookie,因此该cookie将不会发送到客户端。但是,如果该cookie已经存在于客户端,则该方法不会将其从客户端中删除。 - Asef Hossini
2个回答

85

尝试:

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

有关MSDN的更多信息。


我过去曾手动设置身份验证 Cookie,但名称与表单身份验证 Cookie 名称不同。在我更改后,FormsAuthentication.SignOut()实际上起作用了。无论如何感谢您。 - Dimitri

6

c.Expires = DateTime.Now.AddDays(-1);

这并不会立即清除cookies。

使用以下代码将立即清除cookies:c.Expires = DateTime.Now.AddSeconds(1);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接