首页 > 代码库 > 项目实施中不可小觑之:cookies作用域

项目实施中不可小觑之:cookies作用域

还记得前年在一次项目中被cookies的作用域害的挺惨,那一次整整花了2天才找到这个问题,事情大概是这样的:

事故发生的一个月前,我们将项目开发完毕,然后部署上线,当时客户只有一个域名(化名为:www.abc.cn),所以一开始并没有对会员登录的cookies配置作用域;

事故发生的前一晚,客户打电话给我,说是他们自己开发了一个IM系统,部署在im.abc.cn,想要共享读www.abc.cn的会员cookies,于是我们把cookies作用域改为了".abc.cn",这样一来只要是以abc.cn为根域的应用就都能读到这个cookies值了,一切都按照理论上的可行方案进行着。

当我们在本地模拟测试通过后,当天下班后,我们将服务器上的cookies作用域修改成了".abc.cn"。可谁知道第二天客户凌晨9点就打电话过来说:今天上午已经有数位使用者打电话过来反映说,会员一登陆就自动退出。我们迅速的派了好几个人,使用IE  FireFox  Chrome  遨游等各大主流浏览器来测试这个问题,却怎么也没能还原故障。而客户说这问题肯定是存在着的,之后我们被迫又把cookies域设置为空,先让网站正常运营。

同时我们几个研发围坐在一起,把思路理了一下,仍然没能找出一丝端倪(因为通常情况是先要模拟故障现场再分析问题的)。

下班回家后,我冷静的坐在电脑前,把项目部署在本地,然后先不配置cookies,跑一次会员登录流程(userid为1),然后cookies域改为.abc.cn后再跑一次,还是没发现问题,然后重新注册一个用户会再登陆(userid为4)~~~~~~此时故障重现了。

~~~~

~~~~

~~~~

~~~~

通过F12调试工具发现:原来有2个cookies的userid:一个是1,在www.abc.cn下;而一个是4,在.abc.cn下。我顿时明白了些什么…………

总结:

1、当cookies作用域为空时,默认就是当前域名www.abc.cn

2、当cookies作用域改为.abc.cn后,它无法再去改写www.abc.cn下的同名cookies,写入的信息都存放在domain为.abc.cn下,而读cookies的时候因为不能设置作用域,所以优先读到了www.abc.cn下的值,最后就出现读、写不同步的现象(也就是一登陆就强行退出的故障)

 

项目实施中不可小觑之:cookies作用域