为什么设置document.cookie在Chrome中不起作用
Why would setting document.cookie not work in Chrome?
我的同事遇到了一个问题,无法通过以下代码在Chrome上设置cookie:
document.cookie = "TEST=1; expires=Tue, 14 Oct 2014 20:23:32 GMT; path=/"
之后立即将document.cookie
放入控制台会显示结果,就好像我没有做任何更改一样。刷新页面时,cookie不在那里,所以它报告正确,只是设置不正确。
如果他打开一个新的隐姓埋名窗口,为其他人工作,上述代码就会起作用。我使用开发工具删除了他的所有cookie,但手动设置cookie仍然没有成功(尽管其他cookie会通过服务器标头设置)。
一旦他重新启动Chrome,它就开始正常运行,所以他似乎遇到了一些无法再复制的怪癖或错误。
有其他人碰到过这个吗?到目前为止,我正在考虑检查document.cookie
在设置后是否报告了预期内容,然后在用户禁用cookie时启动我们的无Cookie流,因为情况不匹配。我讨厌这样做,所以任何建议/答案都会很棒。
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=
。
我希望这能让你摆脱饼干噩梦(这是给我的)。
确保在服务器(至少是本地服务器)上运行它,以便document.cookie正常工作。
如果您在浏览器中本地运行此文件。"document.cookie"不起作用。
正如另一位用户所提到的,您必须逐一设置它们。这些函数在解析&应用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('=');
}
}
您必须设置域!
function setCookie(cname, cvalue, exdays) {
const d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
let expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/;domain=" +
window.location.hostname;
}
为cookie设置的过期日期可能是个问题。我以前在Chrome上遇到过这样的问题。将日期设置为当前或将来的日期,并测试它是否有效。也许Chrome就是这样设计的。
不久前,我们在工作中也遇到了同样的问题,在我们的情况下,只有当我们在本地环境中工作时才会发生这种情况,经过研究,我们看到了一篇文章,说浏览器在localhost:3000上有某种问题,因为它识别为不安全的页面或类似的东西。我们只是通过将localhost:3000替换为127.0.0.1:3000(我认为ip取决于您的配置)进行了修复,在我们替换后,它可以完美地工作。我希望它能帮助你。
- XMLHttpRequest在移动设备上的chrome上不起作用
- ng disabled在chrome中不起作用.按钮在角度上未禁用
- 鼠标输入在 YUI 的 chrome 中不起作用
- Javascript的某些部分在Chrome中不起作用,但在其他浏览器中可以完美工作
- HTML5视频链接在Chrome中不起作用
- jQuery克隆函数在chrome中不起作用
- jQuery place attr src在Chrome中不起作用
- chrome中的onmouseover(下拉选项标记)事件不起作用-php,javascript
- .ajax调用在chrome中不起作用
- Javascript/AAJAX在Opera中不起作用,在FF/IE/Chrome中完美工作
- 正在处理在chrome扩展中不起作用的js
- MediaSource API demo不起作用(Chrome)
- Chrome 中表格的 CSV 导出不起作用 - JavaScript/AngularJS
- $.getJSON 在 Chrome 和 Safari 中不起作用
- OnClick 事件在 Chrome 中不起作用
- getUserMedia 在 Chrome v50.0.2661.86 上不起作用
- dataTransfer.set拖放的数据在chrome中不起作用
- 简单的鼠标悬停在 Chrome 中不起作用
- window.close();在Chrome和Firefox中不起作用
- Chrome 扩展程序权限不起作用