当前位置:首页 > web > 正文

不同浏览器对大小超限cookie的处理和解决方法

【背景介绍】
某系统偶尔会出现类似A用户(OA登录)无法登陆,而B用户(OA登录)正常登录的情况。开发在测试的时候,用B用户进行登录没有发现问题;或者出现A用户正常登录,可是用户名无法显示;于是异常的跟踪开始了。

【原因分析】
用户登录后会写入用户的个人信息,包括用户名,角色名等等信息,可是用户的角色随着时光的流逝,角色越来越多,数组的大小逐渐变大;意味着写入的cookie逐渐变大。无法登录是因为cookie已经超过临界值,登录后无法显示用户名,是因为cookie大小正好处于临界状态,登录后,角色增加,cookie无法保存会被浏览器吞噬。大家可以看截图,可以看到cookie已经超过了4K,各种浏览器的提示都不同。IE,FF,Chrome纷纷中招,不过QQ浏览器屹立不倒,可能对cookie的处理有些不同。

【cookie背景知识】
cookie原来是用来解决HTTP的无状态性的问题。有了cookie,各种个性化定制和推送才有了发展。可是不同的浏览器对cookie大小和容量是有限制的,当cookie超限的时候,会出现各种异常;
不同浏览器间 cookie 总大小也不同:

Firefox 和 Safari 允许 cookie 多达 4097 个字节, 包括名(name)、值(value)和等号。
Opera 允许 cookie 多达 4096 个字节, 包括:名(name)、值(value)和等号。
Internet Explorer 允许 cookie 多达 4095 个字节, 包括:名(name)、值(value)和等号。
注:多字节字符计算为两个字节。在所有浏览器中,任何 cookie 大小超过限制都被忽略,且永远不会被设置。

【解决方案】
cookie在设计的时候,仅仅存入必须要的信息,其他的可变化的数据强烈建议不能写cookie,否则在某个时间点,一定会照成各种异常的现象;在QZone等大流量的平台,对cookie控制都非常严格,任何的cookie都需要审批然后才可以写入cookie,最大的原因之一在于高峰时段,每个cookie算4K,每次请求会包括多个带有cookie的请求,这些都是流量,都是成本。在小的系统中也需要重点关注,在mcloud中对部分cookie进行优化和减少,对于变化的角色信息通过读数据库或者缓存的信息进行处理。

暂无评论

发表评论