【问题标题】:javascript document.cookie missing some pairsjavascript document.cookie 缺少一些对
【发布时间】:2011-04-24 02:24:30
【问题描述】:

我的脚本设置了十个cookie,浏览器成功保存了它们,但是document.cookie只检索到九对,缺失的一对如下:

auth:4ae9Mq1j6tjt7dV6kV6A0piHB6NnNjijBmecax9mA8cfDpSs6pnAcD7H1%2FUqWMIIB%2BbgtKIJ2w1L2GnXkgV2

发生了什么? document.cookie 有字数限制吗? cookie 域与所有其他域相同。

【问题讨论】:

    标签: javascript cookies


    【解决方案1】:

    问题是服务器端正在发送带有 HttpOnly 设置的 cookie,如下所述:http://en.wikipedia.org/w/index.php?title=HTTP_cookie#HttpOnly_cookie

    以这种方式发送的 Cookie 无法通过 document.cookie 访问。这通常用于帮助保护 cookie 值免受您网站上可能的 XSS 攻击。

    您没有提及您在服务器端使用哪种技术来设置 cookie。如果您使用的是 PHP,此链接列出了设置 HttpOnly 标志的可能方式:

    https://www.owasp.org/index.php/HttpOnly#Using_PHP_to_set_HttpOnly

    【讨论】:

      【解决方案2】:

      我有两个明确的问题:

      1. 如果最终的 cookie 碎屑似乎没有存储在 document.cookie 中,为什么您认为“浏览器成功保存”了所有 cookie 碎屑?
      2. 是您最后尝试添加的缺失值吗?如果是这样,根据您提供的信息,我认为该值太长而无法存储在 cookie 中。

      cookie crumb 字符串的字节大小取决于您的编码。

      您可以阅读有关每个域here 允许的最大 cookie 大小和数量的更多信息。如果您在不同浏览器中超出限制here,您可以阅读较早的讨论。这些限制因浏览器而异。

      RFC 2109 声明浏览器应支持至少 4096 字节的 cookie 大小,至少 300 个总 cookie,以及每个域或唯一主机至少 20 个 cookie。 This article 展示了 2009 年以来的 cookie 大小测试。This 2008 blog post 还记录了一些关于各个浏览器如何处理 cookie 的项目。

      请注意,IE 7 and later 将每个域的 cookie 数量限制为 50 个,而早期版本的 IE 限制为每个域 20 个。

      RFC 2109 和大量在线参考资料表明,大约 4096 字节的最大大小是一个很好的一般假设。如果你不能保持低于这个限制,你可能不得不以某种方式将你的数据存储在服务器上。

      如果问题不是 cookie 大小,更多关于您如何存储和检索 cookie 值的详细信息将有助于小组解决您的问题。

      【讨论】:

      • 当我回答这个帖子时,我没有意识到这个帖子是如此陈旧。无论如何,我希望这个答案对某人有所帮助。
      猜你喜欢
      • 2014-07-26
      • 2012-06-12
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多