Cookie的最大大小是多少,每个网站的浏览器中可以存储多少?

gir*_*iri 43 cookies

我正在学习cookie,在编写依赖cookie来存储状态的Web应用程序时,我想知道浏览器的支持.

  • 对于每个域/网站,可以向浏览器发送多少个cookie,大小是多少?

  • 如果发送和存储多个cookie,是否会影响性能?

Joe*_*hts 49

每个域不超过50个cookie,每个cookie最多4 KB(甚至总共4 KB,请参阅Iain的回答).在IE 6上,它曾经是每个域20个cookie.

通常,建议在服务器上保留状态,并仅将cookie用于会话跟踪.它们与每个请求一起发送,因此如果目的是保持会话状态,它们会形成不必要的开销.

如果您确实希望在客户端上保持状态,并且可以使用JavaScript来执行此操作,则可以选择.直接使用各种存储API或查找包含详细信息的包装库.

客户端存储选项:

  • localStorage:Firefox 2 +,Chrome 4 +,Safari 4 +,Internet Explorer 8+.每个域5 MB,没有用户确认(但要注意它存储为UTF-16,因此每个字符可以使用两个字节).
  • IndexedDB:Firefox 4 +,Chrome 11 +,Safari 10 +,Internet Explorer 10+.每个域5 MB,无需用户确认,确认后更多(特定于浏览器,请查看浏览器的详细信息).

不推荐的存储选项:

  • Flash 8持久存储:任何带Flash 8+的浏览器.100 KB,更多用户许可.不推荐使用,因为Flash本身已被弃用.
  • userData:Internet Explorer 5.5+.受限区域中每个域64 KB,Internet区域中每个域128 KB.由localStorage取代.
  • Web SQL:仅限Chrome和Safari,它永远不会用于其他浏览器,因为它无法将其标准化.

因此,通常对于客户端存储,它取决于用例:

  • 对于会话ID跟踪或几KB,请使用cookie.
  • localstorage最高可达2 MB,可在所有常见浏览器中提供解决方案.
  • 2 MB及以上,使用IndexedDB(寻找一个好的包装库).

  • RFC 2109指定最少20个cookie pr域.每个4kB.但我已经读过IE6所有20个版本只有4kB.所以总共只有4kB! (2认同)
  • @Marco Demaio:很高兴得到纠正,但我的测试脚本报告IE7 4KB限制,所有cookie的IE8 10KB限制.请参见http://myownplayground.atspace.com/cookietest.html (2认同)

Iai*_*ain 24

Cookie大小限制

如果你想支持大多数浏览器,然后不超过每50块域饼干,和每个域4093个字节.也就是说,所有cookie的大小不应超过4093字节.

表现思想

每次域名请求都会发送Cookie,其中包括图片.为了论证,假设您的网站上有30个资源,并且有4093个字节的cookie.这意味着用户正在上传122Kb的数据.因此,如果我有1Mbit上传连接,则需要至少1秒钟.

如果您想查看我创建的cookie测试页面,或想了解更多相关信息,请查看浏览器Cookie限制.


Has*_*yed 14

首先,我建议你不要担心这个问题.有AMPLE空间来序列化大量的标识符.

其次,它不是web-serverweb-domain- 例如,www.google.com而不是由服务于Google域的100个不同物理服务器存储的.

第三,如果你不必担心知道有两个可能的cookie标题.这些cookie标头的大小由浏览器软件限制决定.

设计讨论

您不想使用cookie标头的是发送有关客户端会话的详细信息.例如,如果您正在构建电子邮件前端,请不要尝试填写客户端正在键入cookie的电子邮件.相反,您将向客户端发送代表其身份+会话的cookie:您将所有会话数据存储在此身份中.您可以为每个cookie标头存储数十个标识符(4-16个字节),并且没有人需要超过4个标识符.cookie数据(作为整数)往往被编码为base64,这增加了字节数.

性能

您的浏览器会向Web服务器发送大量标头.cookie只是另一个100-1000字节(大多数接近100).在两个极端情况下,将这些发送到Web服务器只需要一小部分时间 - 当然放在上下文中.您应该记住,Web是基于文本的协议构建的.

  • cookie标头不仅被发送以请求html,还被发送到从同一域加载的所有资源.因此,如果大量数据存储在cookie中,则会对性能产生很大影响.http://www.yuiblog.com/blog/2007/03/01/performance-research-part-3/ (7认同)

Mar*_*aio 5

如果您担心由于在每个服务器请求上发送大型cookie而导致性能下降,那么最好将所有静态文件(图像,CSS等)放入站点的子域中,例如http://static.yourdomain.com.

这样,只要您的站点www.yourdomain.com 要求提供静态文件(如图像),浏览器就不会再发送cookie和HTTP请求了.

资料来源:http://developer.yahoo.com/performance/rules.html#cookie_free