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

pod7payv  于 2022-12-06  发布在  Go
关注(0)|答案(6)|浏览(318)

我的同事遇到了一个问题,没有cookie可以通过这样的代码在Chrome上设置:
document.cookie = "TEST=1; expires=Tue, 14 Oct 2014 20:23:32 GMT; path=/"
如果我没有做任何更改,那么在控制台中立即输入document.cookie,结果会显示出来。刷新页面时,cookie不在那里,所以它报告正确,只是设置不正确。
如果他打开了一个新的匿名窗口并为其他所有人工作,上面的代码将工作。我使用开发工具删除了他所有的cookie,但仍然没有手动设置cookie的运气(尽管其他人会回来,通过服务器头设置)。
一旦他重新启动Chrome,它就开始正常运行,所以看起来他遇到了一些无法再复制的怪癖或bug。
有其他人遇到过这种情况吗?到目前为止,我正在考虑检查document.cookie在设置后返回的报告是什么,然后启动我们的无cookie流程,当用户禁用cookie时,事情不匹配。我讨厌这样做的想法,所以任何建议/答案都是伟大的。

nhn9ugyo

nhn9ugyo1#

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=/"

是的,它添加了密钥,而不是将整个cookie替换为TEST=1
如果您需要移除机码,您可以不提供任何值:TEST= .
我希望这能让你从饼干噩梦中走出来(对我来说是)。

33qvvth1

33qvvth12#

确保在服务器上运行它(至少是本地服务器),这样document.cookie才能正常工作。
如果您在浏览器中本地运行此文件,.“document.cookie”将无法工作。

w8ntj3qf

w8ntj3qf3#

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

pkmbmrz74#

您必须设置域!

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;
}
jtw3ybtb

jtw3ybtb5#

可能是cookie的有效期设置有问题。我以前在Chrome浏览器上遇到过类似的问题。将日期设置为当前或未来的日期,然后测试它是否有效。可能Chrome浏览器就是这样设计的。

gjmwrych

gjmwrych6#

我们有同样的问题在工作中前一段时间,在我们的情况下,它只发生在我们工作在本地环境,经过研究,我们遇到了一篇文章说,浏览器有一些问题的localhost:3000,因为它识别为一个不安全的网页或类似的东西。我们修复了只是更换localhost:3000为127.0.0.1:3000(我认为ip取决于您的配置),并在我们更换后,它的工作完美。我希望它能帮助你。

相关问题