删除 Cookie 并放弃会话不会删除 Cookie

本文关键字:删除 Cookie 放弃 会话 | 更新日期: 2023-09-27 18:34:37

我在C# WebForms应用程序中创建了一个cookie,我正在Windows 7 64位上的IE10上测试该应用程序。

问题是我无法从代码隐藏中删除cookie。如果我刷新页面或只是单击超链接返回完全相同的页面,该页面仍然可以读取cookie。

我有一个弹出控件,响应用户按下 ok 按钮,将执行以下操作:

String key = "mycookiedata";
HttpCookie oCookie = null;
if (null != HttpContext.Current.Request.Cookies[key])
{
    oCookie = HttpContext.Current.Request.Cookies[key];
    oCookie.Expires = DateTime.Now.AddDays(-1);
    HttpContext.Current.Response.Cookies.Set(oCookie);
}
Session.Remove(key);
Session.Abandon();
Session.Clear();

隐藏的代码完成,控制权返回给用户。一切似乎都很好,直到我刷新页面并发现我认为被删除的cookie没有。出于纯粹的好奇心,我还尝试关闭浏览器窗口并在新浏览器中重新加载页面,而 cookie 仍然存在。注销的用户应该对他们真正注销并且 cookie 消失感到舒适。

我是否错过了代码中的某些内容?

删除 Cookie 并放弃会话不会删除 Cookie

You cannot directly delete a cookie on a user's computer. 

但是,您可以指示用户的浏览器通过以下方式删除cookie 将 Cookie 的到期日期设置为过去的日期。

用户下次向网域中的网页发出请求时,或 设置cookie的路径,浏览器将确定 饼干已过期并删除它。

检查此从 MSDN 中删除 Cookie

您所能做的就是通过设置过去的时间使cookie过期

下面的代码将做到这一点

if (Request.Cookies[key] != null)
{
    HttpCookie myCookie = new HttpCookie(key);
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
}

请求页面,如第一个答案一样不起作用。我尝试了几种变体和nada。

我终于想到了答案。在注销对话框上确定按钮的 DevExpress 回调面板的 EndCallback JavaScript 事件中,我实现了对 JavaScript 函数的调用,Delete_Cookie。让JavaScript删除cookie工作!

后面的代码有两个变化,一个或两个都可能是诀窍。

  1. 从客户端中删除 Cookie,而不是隐藏的 C# 代码。
  2. Delete_Cookie代码将到期日期设置为的日期不是当前日期减去一 (1(,而是 1970 年的日期。我怀疑 1970 年的日期起到了作用。

这是文章的链接,我使用了其Delete_Cookie代码。