【问题标题】: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 报告的错误,但我还没有足够的信息,这就是为什么我想知道是否有其他人遇到过这个问题。

标签: javascript google-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”不起作用。

    【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      相关资源
      最近更新 更多