我可以/应该创建多大的 cookie?
Posted
技术标签:
【中文标题】我可以/应该创建多大的 cookie?【英文标题】:How big of a cookie can/should I create? 【发布时间】:2012-02-01 04:15:20 【问题描述】:当用户登录我们的网站时,我们会从我们的数据库中检索一个对象,该对象包含在整个网站中使用的各种设置。为了减少每次用户与我们的网站交互时返回我们数据库的服务器负载,我们正在尝试考虑替代方法。 (我们在需要时对对象进行序列化和反序列化)。该对象可能小于 1MB,但可能会有所不同。
-
我们可以在会话中拥有多大的对象而不显着影响性能?
我们可以在 cookie 中存储多大的对象?
还有其他选择吗(除了从我们的数据库中检索数据)?
【问题讨论】:
您的数据库真的太慢以至于从中获取值有问题吗?这可能真的,真的应该在服务器端处理 What is the maximum size of a cookie file?的可能重复 如果你真的需要这样做,请参阅Local Storage vs Cookies @Pekka...速度不是问题。我们想知道是否有更好的方法来做事。 Local Storage vs 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) 如果您将设置类型的数据存储在本地存储中,您仍然需要与服务器同步,否则更改浏览器会导致新浏览器中不存在用户设置。
【讨论】:
以上是关于我可以/应该创建多大的 cookie?的主要内容,如果未能解决你的问题,请参考以下文章
想在STM32上移植UCOSII和UCGUI,需要多大的空间资源