【问题标题】:Deleting an HttpCookie Not Just Its Value删除 HttpCookie 不仅仅是它的值
【发布时间】:2015-03-13 07:33:48
【问题描述】:

使用 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.Cookies 的计数是 2,这意味着它正在创建 2 个具有相同名称的 cookie 并感到困惑。

【问题讨论】:

    标签: javascript cookies model-view-controller httpcookie


    【解决方案1】:

    你错过了expires,例如:

    document.cookie="access_token=; expires=Thu, 18 Dec 2013 12:00:00 UTC";
    

    【讨论】:

    • 我不能只设置 document.cookie="";在 Javascript 中?这不会删除 cookie 而不仅仅是它的值吗?
    • document.cookie 充当具有 getter 和 setter 的属性。当您阅读时,它会返回所有 cookie。当您编写它时,创建或修改 cookie。传递空字符串不会做任何事情。
    【解决方案2】:

    你可以使用

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

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

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

    【讨论】:

    • 我可以将到期时间设置为 -1 天,然后在同一控制器中将其删除吗?
    • 您可以先单独检查第一个代码,因为它工作正常。但建议使用 cookie 的到期日期
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多