为什么我不能使用JavaScript过期cookie(不是HttpOnly)

时间:2013-03-18 17:10:10

标签: javascript cookies jquery-cookie

我在通过JavaScript开发的框架中设置了一个cookie(该框架似乎正在使用https://github.com/carhartl/jquery-cookie)。我正在这个框架内开发,但无法访问框架代码,我想通过JavaScript删除cookie(我无权访问此框架中的任何服务器端)。

通过Chrome检查Cookie,我可以对此进行详细说明:

"domain": "www.example.com", 
"expirationDate": 1667235180, 
"hostOnly": true, 
"httpOnly": false, 
"name": "my_cookie", 
"path": "/", 
"secure": false, 
"session": false, 
"storeId": "0", 
"value": "123456789"

它是hostOnly,但这应该没问题,因为我试图从域字段中的相同域集中删除。

我正在尝试使用以下代码将其删除:

function clearCookie(name, domain, path) {
      var domain = domain || document.domain;
      var path = path || "/";
      document.cookie = name + "=; expires=" + +new Date + "; domain=" + domain + "; path=" + path;
};

clearCookie('my_cookie', 'www.example.com', '/');

但是,当我这样做时,它会创建一个域名为“.www.example.com”的新会话cookie(请注意额外的句号)并且不会删除当前的cookie。

我错过了什么?

3 个答案:

答案 0 :(得分:2)

老问题,但我刚刚遇到这个并发现了问题。

如果您有hostOnly cookie,请在修改/过期时不指定域。

如果没有提供域,大多数cookie处理库将自动指定域,这使得编辑hostOnly cookie变得很困难(如果不是不可能的话)。

答案 1 :(得分:1)

我认为您设置过期的方式存在问题。使用JavaScript设置cookie需要UTC / GMT格式的日期。请参阅此相关答案:

Which date formats can I use when specifying the expiry date when setting a cookie?

答案 2 :(得分:0)

您无法通过javascript实际删除Cookie。您所做的是将现有cookie设置为过期,然后允许浏览器处理其销毁。如果你检查jquery-cookie源,你可以看到它实际上有一个破坏cookie的功能,你可以在这里使用它来简化事情。

这里简单的答案是使用现有的框架删除功能。

$.removeCookie(key)