为什么我不能删除这个cookie?

时间:2008-09-11 05:42:44

标签: c# asp.net javascript ajax cookies

好的,这是411 - 我的Global.asax.cs文件中有以下事件处理程序:

private void Global_PostRequestHandlerExecute(object sender, EventArgs e)
{
   if (/* logic that determines that this is an ajax call */)
   {
      // we want to set a cookie
      Response.Cookies.Add(new HttpCookie("MyCookie", "true"));
   }
}

该处理程序将在Ajax请求期间运行(由于我正在使用的Ajax框架),以及其他时间 - if语句的条件过滤掉非Ajax事件,并且工作正常(它不是这里有关系,所以为了简洁起见我没有把它包括在内。

我们可以说这很好用 - 设置了cookie,我能够在客户端上阅读它,而且一切都很顺利。

现在是让我疯狂的部分。

这是我用来删除cookie的JavaScript函数:

function deleteCookie(name) {
   var cookieDate = new Date();
   cookieDate.setTime(cookieDate.getTime() - 1);
   document.cookie = (name + "=; expires=" + cookieDate.toGMTString());
}

因此,当然,在设置cookie之后的某个时刻,我会这样删除它:

deleteCookie("MyCookie");

只是,这不起作用; cookie仍然存在。那么,有谁知道为什么?

8 个答案:

答案 0 :(得分:9)

您必须在创建Cookie的同一路径中删除Cookie。 所以用path = /创建你的cookie并用路径= /把它删除..

答案 1 :(得分:4)

  • 您是否检查过客户端和服务器端的Cookie域和路径以确保它们是相同的?
  • 一个cookie是安全的而另一个不是吗?
  • 除此之外,我怀疑服务器/客户端时钟同步问题,正如Erlend建议的那样。

答案 2 :(得分:2)

您是否尝试使用“; expires = Thu,01-Jan-1970 00:00:01 GMT”?

答案 3 :(得分:2)

很奇怪..你粘贴的代码几乎是逐字逐句的:http://www.quirksmode.org/js/cookies.html工作正常..

我知道您正在使用Ajax,但您是否已经快速尝试将其敲入服务器端代码以查看是否可行?这可能有助于确定JS是否存在问题或其他问题(例如,在cookie上锁定神秘文件)?

更新

只是有一个快速的谷歌,看起来也可能存在浏览器设置问题。我不认为你的问题是这里的代码,它更可能是其他东西。我建议尝试以上作为PoC,我们可以从那里移动。 :)

答案 4 :(得分:2)

我在my blog大约一周前发布了一个js cookie util。这对我来说在所有“A级”浏览器上都有用。

var CookieUtil = {
  createCookie:function(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
  },
  readCookie:function(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
  },
  eraseCookie:function(name) {
    createCookie(name,"",-1);
  }
};

答案 5 :(得分:1)

此外,如果在创建过程中指定了cookie域,我发现您还必须在尝试删除(过期)时指定cookie域。

答案 6 :(得分:0)

我们是否确定没有将Cookie设置为HttpOnly的代码(我们上面没有遗漏任何内容)? HttpOnly属性将阻止(现代)浏览器修改cookie。我有兴趣看看你是否可以像Rob建议的那样杀死服务器端。

答案 7 :(得分:0)

我假设你在浏览器端调用这个javascript。您使用的是哪种浏览器,如何查看Cookie以确认它仍然存在?