【问题标题】:How big of a cookie can/should I create?我可以/应该创建多大的 cookie?
【发布时间】:2012-02-01 04:15:20
【问题描述】:

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

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

【问题讨论】:

标签: html session cookies


【解决方案1】:

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

6.3 实施限制

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

  • 至少 300 个 cookie

  • 每个 cookie 至少 4096 字节(根据 在语法中组成 cookie 非终结符的字符 Set-Cookie 标头的描述)

  • 每个唯一主机或域名至少 20 个 cookie

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多