C# 为什么可以';我不能删除这个cookie吗?

C# 为什么可以';我不能删除这个cookie吗?,c#,asp.net,javascript,ajax,cookies,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 Http

好的,这是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仍然存在。有人知道为什么吗?

你试过使用
;expires=Thu,1970年1月1日00:00:01格林尼治标准时间。。您粘贴的代码几乎与以下内容一字不差:这很好

我知道您正在使用Ajax,但是您是否尝试过快速地将其转换到服务器端代码,以查看其是否有效?这可能有助于判断这是否是JS或其他问题(例如cookie上的神秘文件锁定)

更新
刚刚在谷歌上快速搜索了一下,看起来浏览器设置也可能有问题。我认为你的问题不在于这里的代码,更可能是其他问题。我建议作为PoC尝试上述方法,我们可以从那里开始:

大约一周前,我发布了一个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);
  }
};
var CookieUtil={
createCookie:函数(名称、值、天数){
如果(天){
变量日期=新日期();
date.setTime(date.getTime()+(天*24*60*60*1000));
var expires=“;expires=“+date.togmString();
}
else var expires=“”;
document.cookie=name+“=”+value+expires+“path=/”;
},
readCookie:函数(名称){
变量nameEQ=name+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i
  • 您是否检查了客户端和服务器端cookie域和路径以确保它们相同
  • 一个cookie安全,另一个不安全吗
  • 除此之外,我会怀疑服务器/客户端时钟同步问题,正如Erlend建议的那样

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

我想你是在浏览器端调用这个javascript。您正在使用哪个浏览器,如何查看cookie以确认它仍然存在

您必须在创建cookie的路径上删除cookie。
因此,请使用path=/创建您的cookie,并使用path=/对其进行深入研究。

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

一名海盗走进一家酒吧,酒保说“对不起,船长,你是怎么把船的轮子粘在你的裤裆上的?”“我不知道,”海盗说,“但是它让我发疯了!“对不起,从上下文来看,这个笑话可能没有什么意义——当我写“现在就看那个让我发疯的部分”时“在最初的问题中,我忍不住想到了那个笑话……这是个好笑话。”PYou应该接受@Andreas Petersson的答案。js代码将当前计算机的本地时间带到存储cookie的位置,然后在不久之前保存cookie并过期(即,就本地计算机而言,在过去)。由于浏览器使用本地计算机的时间使cookie过期,所以不应该使用时间同步…我正要建议确保路径(以及域,实际上)也是相同的。因此+1让我们想知道什么是和不是“A级”浏览器:-)@Oddthinking Not-“A级”浏览器:IE6。“A”级浏览器:其他所有内容。我遇到了同样的问题,一些cookie无法删除-添加/肯定为我修复了它。不幸的是,我最终删除了它,检查它是否已被删除,若未被删除,请尝试使用/…再次删除。。。。疯子这在IE7和FF3.5中进行了测试