javascript document.cookie遗漏了一些对

时间:2010-10-12 02:26:17

标签: javascript cookies

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

auth:4ae9Mq1j6tjt7dV6kV6A0piHB6NnNjijBmecax9mA8cfDpSs6pnAcD7H1%2FUqWMIIB%2BbgtKIJ2w1L2GnXkgV2

发生什么事了? document.cookie中是否有字符限制? cookie域与所有其他域相同。

2 个答案:

答案 0 :(得分:7)

问题是服务器端正在发送带有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

答案 1 :(得分:0)

我有两个澄清问题:

  1. 如果最终的面包屑似乎没有存储在document.cookie中,为什么你认为你的“浏览器成功保存了”所有的cookie面包屑?
  2. 您最后尝试添加的值是否为缺失值?如果是这样,根据您提供的信息,我认为该值太长,无法存储在cookie中。
  3. 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值的详细信息将有助于小组解决您的问题。