现象:有部分帐号可以正常登录,有部分帐号不能登录。
通过 HttpFox 跟踪分析,能正常登录的帐号在登录后 HttpFox 显示 Cookie 正常;而不能登录的用户名在登录后跳转到目标页前 Cookie 有,到目标页后 Cookie 诡异地消失了。最初我怀疑是浏览器问题(IE6),后来在其他的机器上试,所有浏览器都会有这个症状。通过不断的F5发现,用不同的用户名登录序列化对象为字符串长度有别外无其他不同。
解决方法:
在 google+baidu 无果后,我只能怀疑是帐号的问题无其他方法,解决问题陷入僵局。同事不经意的一句提示说好像 cookie 有长度限制,我蓦然发现,不能登录的帐号序列化后的cookie有 5000 多个字符,能登录的不到2000个字符。至此才定位问题所在:这是以前的一个设计缺陷,就是将庞大的节点信息存入到 cookie 中了,导致系列化后的字符串过长。而在整个系统中只有加载节点树的时候才用到这个信息,故将这个记录节点信息的属性移除,对整个登录做一些变动,去掉待序列化的对象中不必要的一些信息后,所有的帐号都能正常登录了。