删除 HttpCookie 不仅仅是它的值

Deleting an HttpCookie Not Just Its Value

本文关键字:不仅仅是 HttpCookie 删除      更新时间:2023-09-26

Using MVC

我正在登录时创建一个cookie,如下所示:

Response.Cookies.Add(New HttpCookie("UserId", Id))

搜索了删除cookie的方法,以便我可以在注销时使用它,我找到了这个:

 If Response.Cookies("UserId") IsNot Nothing Then
                Dim c = New HttpCookie("UserId")
                c.Expires = DateTime.Now.AddDays(-1)
                Response.Cookies.Add(c)
 End If
 Response.Cookies.Clear()

在客户端,我正在执行以下操作:

 document.cookie = "access_token=";

但是我发现这不会删除cookie,它只是清空它,我仍然会有一个名为UserId的cookie,其值为Nothing

现在,如果用户注销并在它之后立即登录,则会给我带来问题。

我想做的,是完全删除名为UserId的Cookie,将其从浏览器cookie中完全删除,而不仅仅是清空其值。

有什么办法可以做到这一点吗?

编辑

我认为问题出在这一部分:

If Response.Cookies("UserId") IsNot Nothing Then
                    Dim c = New HttpCookie("UserId")

因为当我调试这段代码时,在这一行之后,我得到的 Response.Cookie 的计数是 2 ,这意味着它正在创建 2 个同名的 cookie 并感到困惑。

你错过了expires,例如:

document.cookie="access_token=; expires=Thu, 18 Dec 2013 12:00:00 UTC";
您可以使用

ControllerContext.HttpContext.Response.Cookies.Remove("cookie name")

但是您不能直接删除cookie,您必须将其设置为在当前日期之前过期,例如:

 myCookie.Expires = DateTime.Now.AddDays(-1d);