1

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

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

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

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 消失感到自在。

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

4

2 回答 2

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

However, you can direct the user's browser to delete the cookie by setting the cookie's expiration date to a past date.

The next time a user makes a request to a page within the domain or path that set the cookie, the browser will determine that the cookie has expired and remove it.

Check this Delete a Cookie from MSDN

All you can do is you can make the cookie to be expired, by setting the past time

The below code will do that

if (Request.Cookies[key] != null)
{
    HttpCookie myCookie = new HttpCookie(key);
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
}
于 2013-10-08T15:50:51.247 回答
0

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

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

后面的代码有两个更改,其中一个或两个都可能是诀窍。

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

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

于 2013-10-08T23:41:15.837 回答