我可以/应该创建多大的cookie?

时间:2012-01-03 01:12:09

标签: html session cookies

当用户登录我们的网站时,我们从数据库中检索一个对象,该对象包含整个站点中使用的各种设置。为了减少每次用户与我们网站交互时返回数据库的服务器负载,我们都在考虑其他方法。 (我们在需要时对对象进行序列化和反序列化)。该对象可能<1MB但可能会有所不同。

  1. 在不显着影响性能的情况下,我们可以在会话中拥有多大的对象?
  2. 我们可以在Cookie中存储多大的对象?
  3. 还有其他选择(除了从我们的数据库中检索数据之外)吗?

2 个答案:

答案 0 :(得分:4)

允许的最大Cookie大小取决于客户端。例如,2005年的MSDN article表示整个 cookie可能至少有4096个字节可用(包括到期日期等)。同一文章中提到的RFC包含有关限制的更多信息:

  

6.3实施限制

     

实际的用户代理实现对数量和数量有限制   他们可以存储的cookie的大小。通常,用户代理的cookie   支持应该没有固定的限制。他们应该努力存储为   许多经常使用的cookie。此外,一般用途   用户代理应提供以下每个最低功能   单独,但不一定同时:

     
      
  • 至少300个cookies

  •   
  • 每个cookie至少4096个字节(以大小为单位来衡量)       在语法中包含非终端cookie的字符       Set-Cookie标题的描述)

  •   
  • 每个唯一的主机或域名至少有20个Cookie

  •   

如果您的会话数据没有价值(如“重启时不应丢失”),请考虑将其存储在memcached中。这非常快,并且只是为了获取会话数据而避免访问数据库。您可能实际上想要考虑使用两者的混合:您可以创建一个包含会话ID和登录信息的小cookie。然后,丢失服务器端会话不会导致用户退出,因此影响会非常小。

答案 1 :(得分:3)

cookie的替代方案是html5本地存储。旧版浏览器不支持它,但如果这对您来说无关紧要,那么它是用户首选项的一个很好的选择。请记住以下内容:

1)默认限制为每个域5MB(我认为)
2)如果将设置类型数据存储在本地存储中,则仍需要与服务器同步,否则更改浏览器将导致新浏览器中不存在用户设置。