使用 ASP.NET 拆分和重新组合 Cookie 中的大字符串
-
25-09-2019 - |
题
我有一个大字符串想要保存在 cookie 中,但是我不知道每个 cookie 的最大字符串长度和最大 cookie 数量的最佳实践是什么。
我应该使用什么逻辑来拆分字符串,然后组合一组 cookie?
(Microsoft ADFS 或许还有 Siteminder 都采用这种技术,所以我对他们的实现感兴趣)
解决方案
Cookie 是由浏览器处理的,因此每个浏览器都有不同的限制。
分割 cookie 只能起到暂时的作用,因为每个站点的 cookie 数据总量也有限制,而且还会增加每个页面上数据传输的开销
每个浏览器每个 cookie 的限制:
Internet Explorer 处理的最大 cookie 约为 3904 字节
Mozilla Firefox 处理的最大 cookie 约为 3136 字节
当我在 Chrome 上进行一些测试时,chrome 内部崩溃并带有一个大 cookie,并且页面下方没有出现任何消息。
现在,Netscape 和 Microsoft 都已采取措施,根据 RFC 2109 限制来限制 cookie 的数量 cookie 总数为 300 参考: http://www.cookiecentral.com/faq/#2.5
这样做的原因有很多,其中之一就是黑客攻击,对一个网站进行成像,然后在 cookie 上上传完整视频:) 并用它填满您的硬盘...
我说最好的做法是在浏览器上保留一个小的cookie引用,并将其与服务器上的真实数据连接起来。从各方面来说都是越小越好。
如何对cookie进行测试,你可以编写这样的代码。
if(Request.Cookies["cookieTest"] == null)
Request.Cookies["cookieTest"].Value = "more text into cookie";
else
Request.Cookies["cookieTest"].Value += "more text into cookie";
// check now the size
Responce.Write(Request.Cookies["cookieTest"].Value.Length);
我的经验表明,当您尝试在 cookie 上使用不受控制的大数据时,会出现许多随机的不可预测的问题。我多次听到支持者说:清除您的 cookie,然后重试:)