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

时间:2010-01-18 15:36:47

标签: cookies

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

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

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

9 个答案:

答案 0 :(得分:49)

每个域不超过50个cookie,每个cookie最多4 KB(甚至总共4 KB,请参阅Iain's answer)。在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,它永远不会出现在其他浏览器中,因为它是not possible to standardize it

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

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

答案 1 :(得分:24)

Cookie大小限制

如果您想支持大多数浏览器,请不要超过每个域 50个Cookie ,每个域 4093个字节。也就是说,所有cookie的大小不应超过4093字节。

表现思考

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

如果您想查看我创建的Cookie测试页,或想了解更多相关信息,请查看Browser Cookie Limits

答案 2 :(得分:14)

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

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

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

设计讨论

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

<强>性能

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

答案 3 :(得分:5)

如果您担心由于在每个服务器请求上发送大型Cookie而导致性能下降,最好将所有静态文件(图像,CSS等)放入网站的子域中,例如{{ 1}}。

通过这种方式,只要您的网站http://static.yourdomain.com要求提供静态文件(如图片),浏览器就不会再发送Cookie和HTTP请求了。

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

答案 4 :(得分:4)

不同的browswers在饼干上有不同的大小限制。以下是IE的信息。 Here是一个列出多个浏览器的页面。

Cookie不是基于服务器保存的,而是基于保存(服务器可能托管许多域,或者服务器场可能正在为单个域提供服务)。

一般情况下,我会避免在cookie中保存大量信息,因为数据会在每次请求时发送到浏览器或从浏览器发送。正如您在问题中所建议的那样,这会对性能产生影响。

通常会在cookie中存储少量数据,主要用于识别用户/会话,以便从数据库或Web服务器本地的其他资源中获取更多数据。

答案 5 :(得分:3)

如果您正在编写网站,最好不要在cookie中存储太多内容,因为每次用户从您的网站请求页面时,该cookie都会发送到服务器。一个更好的解决方案是在cookie中存储唯一的ID,并让服务器根据该唯一ID从数据库或文件存储中提取所需的信息。不幸的是,该解决方案会让人担心您正在跟踪他们的内容,因此您可能希望在您的网站上某处显示“Cookie政策”,说明您为何在浏览器上放置Cookie以及您做了什么跟踪他们。

答案 6 :(得分:3)

4096字节 但是,当您尝试设置大尺寸的Cookie时,真正的问题就出现了。标准规定浏览器必须支持每个cookie至少4096个字节。 IE6不会这样做。相反,对于来自域的所有cookie,它的最大大小似乎为4096字节。

答案 7 :(得分:0)

这是一个关于Cookie限制的非常好的网站,可让您测试浏览器:

http://browsercookielimits.squawky.net/

答案 8 :(得分:0)

CDN来救援。

您可以将静态内容卸载到CDN或Amazon S3等文件存储服务,只要您没有在接收Cookie的子域上设置CNAME记录,就可以轻松保持静态文件请求无Cookie来自您的顶级域名。

这个Blog Post非常适合从无Cookie域提供静态内容,我们如何采用这种最佳实践来提升我们在客户端的性能。