为啥设置 document.cookie 在 Chrome 中不起作用?
Posted
技术标签:
【中文标题】为啥设置 document.cookie 在 Chrome 中不起作用?【英文标题】:Why would setting document.cookie not work in Chrome?为什么设置 document.cookie 在 Chrome 中不起作用? 【发布时间】:2014-12-08 13:16:13 【问题描述】:我的同事遇到了一个问题,无法通过以下代码在 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 流程,而事情不匹配。我讨厌这样做的想法,所以任何建议/答案都会很棒。
【问题讨论】:
“如果它不能被可靠地复制,这不是一个错误”。 每次浏览器重启前都会重现。这让我担心世界上的另一个用户会遇到这种情况,效果很差。开发人员会考虑重新启动浏览器,但我不知道用户会这样做。这可能是向 Chrome 报告的错误,但我还没有足够的信息,这就是为什么我想知道是否有其他人遇到过这个问题。 【参考方案1】:至少在 Chrome 中,cookie 的工作方式有点奇怪。
如果您需要更改 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=
。
我希望这能让你摆脱饼干的噩梦(这是给我的)。
【讨论】:
谢谢,这很有用。这有什么具体原因吗? @cst1992 真诚地我不知道。但我想这是一些早期的实施,它是匆忙做出的,就像当时的许多事情一样:) 实际上已经尝试过了,我必须说,执行TEST=
仍然会留下一个条目,尽管它是一个空值。转到浏览器的 cookie 存储并从那里删除将删除键和值。
@cst1992:如果在本地将TEST
保留为空字符串,Chrome 是否实际上将其发送或而不发送到服务器会很有趣(我只是没时间做这个小测试)。【参考方案2】:
正如另一位用户提到的,您必须一一设置它们。这些函数可用于解析和应用 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】:确保在服务器(至少是本地服务器)上运行它,以便 document.cookie 工作。
如果您在浏览器中本地运行此文件。 “document.cookie”不起作用。
【讨论】:
回复有点晚我知道,但是cookies是http相关的,如果你在本地查看而不使用XAMPP之类的服务器,那么你将无法生成cookies。但是,如果您也想要离线工作的东西,您可以随时考虑使用 localStorage developer.mozilla.org/en-US/docs/Web/API/Window/localStorage【参考方案4】:为 cookie 设置的到期日期可能是问题所在。我之前在 Chrome 上遇到过这样的问题。将日期设置为现在或将来的日期并测试它是否有效。可能这就是 Chrome 的设计方式。
【讨论】:
以上是关于为啥设置 document.cookie 在 Chrome 中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥没有在新标签页控制台中设置 document.cookie?