我在通过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。
我错过了什么?
答案 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)