【问题标题】:Why can't I delete this cookie?为什么我不能删除这个 cookie?
【发布时间】:2008-09-11 05:42:44
【问题描述】:

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

【问题讨论】:

  • 一个海盗走进一家酒吧,酒保说:“对不起,船长,但是你的胯部是怎么把船的轮子卡住的?” “我不知道,”海盗说,“但我快疯了!”
  • 对不起,就上下文而言,这个笑话可能没有意义 - 当我在原始问题中写下“现在让我发疯的部分”时,我忍不住想起了那个笑话。 ..这是一个很好的。 :P
  • 您应该接受@Andreas Petersson 的回答。

标签: c# asp.net javascript ajax cookies


【解决方案1】:

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

【讨论】:

  • 我遇到了同样的问题,一些 cookie 不会删除 - 添加 / 肯定会为我修复它。不幸的是,我最终删除了它,检查它是否被删除,如果它没有被删除,请尝试使用 /.... 再次删除,太疯狂了!这是在 IE7 和 FF3.5 中测试的
【解决方案2】:
  • 您是否检查了客户端和服务器端的 cookie 域和路径以确保它们相同?
  • 一个 cookie 安全而另一个不安全吗?
  • 除此之外,我怀疑服务器/客户端时钟同步问题,正如 Erlend 所建议的那样。

【讨论】:

  • js 代码将当前计算机时间设为存储 cookie 的本地时间,然后将 cookie 保存为在此之前不久到期(即,就本地计算机而言,过去的时间)。由于浏览器使用本地计算机时间来过期cookies,时间同步不应该是它......
  • 我正要建议确保路径(和域,实际上)也是相同的。所以+1
【解决方案3】:

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

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

更新

刚用谷歌搜索了一下,好像浏览器设置也有问题。我不认为你的问题是这里的代码,它更有可能是别的东西。我建议尝试将上述作为 PoC,我们可以从那里开始。 :)

【讨论】:

    【解决方案4】:

    我大约一周前在my blog 上发布了一个 js cookie 实用程序。这在所有“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);
      }
    };
    

    【讨论】:

    • 让我们想知道什么是“A 级”浏览器,什么不是“A 级”浏览器 :-)
    • @Oddthinking Not-“A”级浏览器:IE6。 “A”级浏览器:其他所有内容。
    【解决方案5】:

    你试过用;expires=Thu, 01-Jan-1970 00:00:01 GMT吗?

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            猜你喜欢
            • 2012-02-06
            • 2013-02-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多