什么是cookie的最大大小,每个网站的浏览器中可以存储多less个cookie?
我正在学习cookies,并且在编写依靠cookie存储状态的Web应用程序时,我想知道浏览器的支持。
-
对于每个域名/网站,可以向浏览器发送多less个Cookie,大小是多less?
-
如果多个cookie被发送和存储,是否会影响性能?
首先,我build议你不要担心这个问题。 有足够的空间序列化吨的标识符。
其次,它不是通过web-server
存储,而是通过web-domain
存储的,例如www.google.com
而不是100多个不同的服务于Google域的物理服务器。
第三,如果你不必担心知道有两个可能的cookie头 。 这些cookie头的大小由浏览器软件限制决定。
devise讨论
你不想使用cookie头是发送有关客户端会话的详细信息。 例如,如果您正在构build电子邮件前端,则不要尝试将客户端正在键入的电子邮件填充到cookie中。 相反,您可以向客户端发送一个代表其身份+会话的cookie:您将存储所有会话数据。 你可以存储每个cookie头几十个标识符(4-16字节),没有人需要比这些更多的4个。 cookies数据(作为整数)往往被编码为base64 ,这增加了字节数。
性能
您的浏览器将过多的标头发送到networking服务器。 该cookie只是另一个100-1000字节(大部分更接近100)。 在极端情况下,只要将这些内容发送到networking服务器,只需要很短的时间。 你应该记住,networkingbuild立在基于文本的协议上。
每个cookie 4 KB。 在Internet Explorer 6中,每个域有20个cookie(尽pipe更新已发送,将此限制增加到50)。 这意味着共同点是80 KB的数据,分成20块(最好是笨拙的)。
通常,build议在服务器上保留状态,并仅将cookie用于会话跟踪。 它们随每个请求一起发送,而且在每次服务器调用时,您都不需要数十KB的数据。
如果你想保持客户端的状态,你可以使用JavaScript来做到这一点,有select。 PersistJS库实现了所有这些(作为一个方便的键/值存储)。 Dojo存储是另一个众所周知的跨浏览器本地存储库。
存储选项的简短摘要:
- localStorage / globalStorage :Firefox 2+,Chrome 4 +,Safari 4+,Internet Explorer 8+。 每个域5 MB。
- userData :Internet Explorer 5.5+。 受限区域每个域64 KB,Internet区域每个域128 KB。
- Flash 8持久性存储:任何带有Flash 8 +的浏览器。 100 KB,更多用户权限。
- Google齿轮 :带有Gears插件的任何浏览器。 2 GB,需要明确的用户批准。
所以,一般取决于你的用例:
- 不到10 KB,我会使用cookies。 对用户透明,普遍支持。
- 在10 KB和100 KB之间,用户数据,本地存储和Flash的组合可能是您在所有常见浏览器中提供透明解决scheme所需的。 我刚刚在开发的Web应用程序中用这样的解决schemereplace了cookies,而且效果很好。
- 100 KB及以上:Flash或Gears。 无论哪种方式,用户必须明确授权您存储数据。 Gears最容易使用,因为它提供了一个SQL API。
齿轮正在出路 ,所以不要依赖它。 在许多浏览器上都有原生的SQL存储支持,但是它被认为是被弃用的,所以依靠它也是不好的forms。 客户端存储的未来是IndexedDB ,这是值得关注的,但目前还没有最终确定。
使用像lawnchair这样的库来抽象存储引擎之间的差异(使迁移变得容易)。
Cookie大小限制
如果您要支持大多数浏览器,则每个域不要超过50个cookie,每个域不要超过4093个字节 。 也就是说,所有cookie的大小不应该超过4093字节。
performance思想
每个域名请求都会发送Cookie,其中包括图片。 为了争辩,可以说你的网站上有30个资源,并且有4093个字节的cookies。 这意味着用户正在上传122Kb的数据。 所以如果我有一个1Mbit的上传连接,至less需要1秒。
如果你想看看我创build的cookietesting页面,或者阅读更多关于它的信息,请查看浏览器Cookie限制 。
如果您担心由于在每个服务器请求上发送大量cookie而导致性能下降,一个好主意可能是将所有静态文件(图像,CSS等)放到您网站的子域中,如http://static.yourdomain.com
。
通过这种方式,只要www.yourdomain.com
上的网站要求提供静态文件(如图像),浏览器就不会再将HTTP请求与HTTP请求一起发送。
来源: http : //developer.yahoo.com/performance/rules.html#cookie_free
不同的cookiescookies上有不同的大小限制。 这里是IE的信息。 这是一个列出几个浏览器的页面。
Cookie不是以服务器为基础进行保存的,而是基于域 (服务器可能承载多个域,或者服务器场的对面可能只是服务于一个域)。
一般来说,我会避免将大量的信息保存在Cookie中,因为每次请求都会将数据发送到浏览器。 正如你在你的问题中提出的build议,这可能会影响性能。
通常在cookie中存储less量数据,主要用于识别用户/会话,以便从数据库或Web服务器本地的其他资源中获取更多数据。
如果您正在编写网站,最好不要在cookie中存储太多内容,因为每当用户从您的网站请求某个网页时,该cookie就会发送到服务器。 一个更好的解决scheme是只在Cookie中存储一个唯一的ID,并让服务器根据该唯一ID从数据库或文件存储中提取所需的信息。 不幸的是,解决scheme导致人们担心你跟踪的是什么,所以你可能想在你的网站的某个地方有一个“cookie政策”,说明你为什么要在浏览器上放置一个cookie,以及你做了什么,不要跟踪他们。
4096字节然而,当您尝试设置大尺寸的Cookie时,真正的问题就出现了。 标准规定浏览器必须支持每个cookie至less4096个字节。 IE6不这样做。 相反,它似乎有来自域的所有cookie的最大大小为4096字节。
这是一个非常好的cookie限制网站,可以让你testing你的浏览器:
CDN来救援。
您可以将静态内容卸载到CDN或Amazon S3等文件存储服务,只要您没有在从顶部接收cookie的子域中设置CNAMElogging级域名。
这个博客文章是一个很好的阅读从无Cookie域服务静态内容,我们如何采用这个最佳实践,以提高我们在客户端的performance。