Javascript 为什么在Chrome中设置document.cookie不起作用?

Javascript 为什么在Chrome中设置document.cookie不起作用?,javascript,google-chrome,Javascript,Google Chrome,我的同事遇到了这样一个问题:Chrome上无法通过以下代码设置cookie: document.cookie=“TEST=1;expires=Tue,2014年10月14日20:23:32 GMT;path=/” 之后立即将document.cookie放入控制台将显示结果,就好像我没有做任何更改一样。在刷新页面时,cookie不在那里,因此报告正确,只是设置不正确 如果他打开一个新的隐姓埋名窗口,为其他所有人工作,上面的代码就会起作用。我使用开发工具删除了他的所有cookie,但仍然没有幸手动

我的同事遇到了这样一个问题:Chrome上无法通过以下代码设置cookie:

document.cookie=“TEST=1;expires=Tue,2014年10月14日20:23:32 GMT;path=/”

之后立即将
document.cookie
放入控制台将显示结果,就好像我没有做任何更改一样。在刷新页面时,cookie不在那里,因此报告正确,只是设置不正确

如果他打开一个新的隐姓埋名窗口,为其他所有人工作,上面的代码就会起作用。我使用开发工具删除了他的所有cookie,但仍然没有幸手动设置cookie(尽管其他人会通过服务器头返回设置)

一旦他重新启动了Chrome,它就开始正常运行,所以看起来他遇到了一些无法重现的怪癖或错误


还有其他人碰到过这个吗?到目前为止,我正在考虑检查
document.cookie
报告设置后的预期内容,然后在不匹配的情况下,当用户禁用cookie时,启动我们的无cookie流。我讨厌这样做,所以任何建议/答案都会很棒。

cookies的工作方式,至少在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=/"
是的,它添加了密钥,而不是将整个cookie替换为
TEST=1

如果需要删除密钥,可以简单地不提供值:
TEST=


我希望这能让你摆脱饼干噩梦(这是为我准备的)。

正如另一位用户所提到的,你必须逐个设置它们。这些函数在分析和应用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('=');
    }
}

确保在服务器(至少是本地服务器)上运行它,以便document.cookie正常工作


如果在浏览器中本地运行此文件。“document.cookie”不起作用。

为cookie设置的过期日期可能是问题所在。我以前在Chrome上遇到过这样的问题。将日期设置为当前日期或未来日期,并测试其是否有效。可能这就是Chrome的设计方式。

“如果不能可靠地复制,那就不是一个bug”。每次都会复制它,直到浏览器重新启动。这让我担心世界上的另一个用户可能会遇到这种情况,而且效果非常糟糕。开发者会考虑重新启动浏览器,但我不知道用户会这么做。这可能是一个bug,需要向Chrome报告,但我还没有足够的信息,这就是为什么我想知道是否有其他人遇到过这个问题。我知道回复有点晚,但Cookies与http相关,如果您在本地查看而不使用诸如XAMPP之类的服务器,那么您将无法生成Cookies。但是,如果你想要一些离线工作的东西,你可以考虑使用感谢,这很有用。有什么具体的原因吗?@我不知道。但我想这是一些早期的实现,它是匆忙完成的,就像当时的许多事情一样:)在实际尝试过这一点之后,我必须说执行
TEST=
仍然会留下一个条目,尽管它的值是空的。转到浏览器的cookie存储并从中删除将删除密钥和值。@cst1992:在本地将
TEST
保留为空字符串的同时,检查Chrome是否真的将其发送到服务器(我只是没有时间做这个小测试)会很有趣。