最近一个项目中,发现打开多个页面后,会发生登录状态的丢失。通过fiddler抓包发现,两个连续类似页面的http请求有cookie丢失的情况:

  1. 最后一个正常的页面的http request header中,包含phpsessionid等cookie值,response里没有对cookie的操作
  2. 第一个异常的页面的http request header 中,缺少phpsessionid等cookie值
  3. 这时尝试进入其他需要登录才能访问的系统,登录状态也丢失了,这些系统是其他域且功能无关的登录系统

于是猜测cookie的丢失应该是发生在浏览器端,而且应该不是代码导致的,因为js代码肯定无权访问其他域名的cookie。

最终的结论是:

该类型页面中 cookie个数会进行累加,导致cookie个数超过浏览器限制,浏览器会清除cookie,从而导致登录状态的丢失。IE、FF、chrome都有该现象,但是不同版本有区别。单个域名cookie上限个数有的是20、50,甚至还有对cookie总数的限制。清除策略有的是随机清除,有的是清除最老的cookie。

 

 

Leave a Reply