我的同事遇到了一个问题,即可以通过以下代码在Chrome上设置无Cookie:
document.cookie = "TEST=1; expires=Tue, 14 Oct 2014 20:23:32 GMT; path=/"
将document.cookie
放入控制台后会立即显示结果,好像我没有做任何更改。在刷新页面时,cookie不存在,因此报告正确,只是没有正确设置。
如果他打开一个新的隐身窗口并且为其他所有人工作,上面的代码就可以工作了。我使用开发工具删除了所有的cookie,并且仍然没有运气手动设置cookie(尽管其他人会通过服务器头设置回来)。
一旦他重新启动Chrome,它就会开始正常运行,所以看起来他正在遇到一些无法再复制的怪癖或错误。
有没有其他人遇到这个?截至目前,我正在考虑检查document.cookie
报告设置后的预期结果,然后启动我们的无cookie流程,以便在用户不匹配时禁用Cookie。我讨厌这样做的想法,所以任何建议/答案都会很棒。
答案 0 :(得分:6)
Cookie的工作方式,至少在Chrome中,有点奇怪。
如果您需要更改Cookie的值,则需要逐个添加/设置每个键 。
在您的控制台中尝试此操作:
document.cookie; // -> "expires=Tue, 14 Oct 2014 20:23:32 GMT; path=/"
document.cookie = 'TEST=1';
document.cookie; // -> "TEST=1; expires=Tue, 14 Oct 2014 20:23:32 GMT; path=/"
是的,它已添加密钥,而不是用TEST=1
替换整个Cookie。
如果您需要删除密钥,则可以简单地不提供任何值:TEST=
。
我希望这会让你摆脱饼干的噩梦(这对我而言)。
答案 1 :(得分:3)
确保在服务器(至少是本地服务器)上运行它,以便document.cookie正常工作。
如果您在浏览器中本地运行此文件。 “document.cookie”不起作用。
答案 2 :(得分:0)
正如另一位用户所提到的,你必须逐个设置它们。这些函数在解析和解析时非常有用。应用cookie字符串:
function clearCookies(){
var cookies = document.cookie.split(';');
for(i in cookies){
var vals = cookies[i].split('=');
var name = vals.shift(0, 1).trim();
document.cookie = name+'=';
}
}
function parseCookies(cookie){
clearCookies();
var cookies = cookie.split(';');
for(i in cookies){
var vals = cookies[i].split('=');
var name = vals.shift(0, 1).trim();
document.cookie = name+'='+vals.join('=');
}
}
答案 3 :(得分:0)
为cookie设置的到期日期可能是问题所在。我以前在Chrome上遇到过这样的问题。将日期设置为当前日期或将来的日期,并测试是否可行。可能就是Chrome的设计方式。