代码之家  ›  专栏  ›  技术社区  ›  Jason Bunting

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

  •  8
  • Jason Bunting  · 技术社区  · 17 年前

    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事件,并且工作正常(这里与此无关,因此为了简洁起见,我没有将其包括在内)。

    现在是让我发疯的部分。

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

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

    deleteCookie("MyCookie");
    

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

    8 回复  |  直到 17 年前
        1
  •  9
  •   Andreas Petersson    17 年前

    您必须在创建cookie的路径上删除cookie。 因此,使用path=/创建cookie,并使用path=/进行数据挖掘。。

        2
  •  4
  •   Robert J. Walker    17 年前
    • 您是否检查了客户端和服务器端cookie域和路径以确保它们相同?
    • 一个cookie安全,另一个不安全吗?
    • 除此之外,我会怀疑服务器/客户端时钟同步问题,正如Erlend建议的那样。
        3
  •  2
  •   Community Mohan Dere    6 年前

    http://www.quirksmode.org/js/cookies.html 好的。。

    将其输入服务器端代码,看看是否有效 ? 这可能有助于判断这是否是JS或其他问题(例如cookie上的神秘文件锁定)?

    使现代化

        4
  •  2
  •   Ricky    17 年前

    大约一周前,我发布了一个js cookie util my blog . 这在所有“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
  •  2
  •   isherwood    5 年前

    ;expires=Thu, 01-Jan-1970 00:00:01 GMT ?

        6
  •  1
  •   just.jimmy    15 年前

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

        7
  •  0
  •   Tyler    17 年前

        8
  •  0
  •   benc    17 年前

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

    推荐文章