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

时间:2013-10-08 15:43:16

标签: c# asp.net cookies webforms httpcookie

我在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已经消失。

我是否遗漏了代码中的内容?

2 个答案:

答案 0 :(得分:1)

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

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

     

下次用户向域内的页面发出请求或   设置cookie的路径,浏览器将确定该   cookie已过期并将其删除。

选中 Delete a Cookie from MSDN

您可以做的就是通过设置过去时间来使Cookie过期

以下代码将执行此操作

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

答案 1 :(得分:0)

请求页面,如第一个答案中所示无效。我尝试了几种变体和虚无...。

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

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

  1. 从客户端删除cookie,而不是后面的C#代码。
  2. Delete_Cookie代码将过期日期设置为不是当前日期减去一(1),而是将日期设置为1970年。我怀疑1970年的日期就行了。
  3. 这篇文章的link是我用过的Delete_Cookie代码。