二级域名共享cookies

今天其他项目,突然想到之前评论模块是一个二级域名下独立项目。但是却和商城可以共享基于cookie的用户登录信息。但是两套系统一级域名是一样的。原来www.xiaohuochai.net,和 blog.xiaohuochai.net 也同是二级域名,一级域名是 xiaohuochai.net 哈哈。唉,文盲啊文盲。

随后查了一些资料确认了一下。


摘抄如下:


网上已经有很多基于二级域名下cookie共享的SSO的解决方案,对于原理大家可能都很了解,无非就是登录一个系统,产生一个令牌保存到 Client端的cookie中,这个cookie是基于主域名的,然后再登录其它二级域名下的系统,就会直接读取主域名下的cookie中的令牌,不要重新登录,方面用户使用多个系统。正好做到的项目中用到这个SSO登录验证,自己调试中遇到一些问题,以及解决方案,跟大家分享一下。

我的项目中有两个系统,域名分别是A.test.com,B.test.com(举例),test.com是一级域名,A.test.com&B.test.com是二级域名。任务是要做到在A登录后可以直接进入B系统,B系统会验证cookie的令牌信息,正确的令牌才允许访问进入系统。A系统访问路径是http://A.test.com/x,B系统的访问路径是http://B.test.com/y。

好了,下面开始说明一下我的解决历程:

1.编码

在A系统登录成功后写入cookie

....

cookie cookie=new cookie("token","令牌信息");//关于令牌名称可以约定一个,到时B系统会根据这个名称去获取令牌信息,信息令牌是加密处理r后的字符串,如何加密这里不再赘述。

....

cookie.setDomain("test.com");//是基于一级域名的

cookie.setMaxAge(1800);//设定cookie的有效期

response.addcookie(cookie);

....

2.测试检查

通过http://A.test.com/x访问后,cookie目录出现一个administrator@test.com[1]的cookie 文件,查看IE缓存目录,有一条名为x/的记录,internet地址为cookie:administrator@test.com/x,系统缓存目录地址C:\Documents and Settings\administrator\Local Settings\Temporary Internet Files,我的是XP系统,cookie目录地址C:\Documents and Settings\administrator\cookies。

通过http://B.test.com/y访问后,根据读取不到这个cookie,为了测试方便,我在Y/下的index.jsp中,写了一段代码,就是往cookie中写一些信息,看它会保存到哪个cookie文件中,测试后发现在cookie目录会生成一个 administrator@test.com[2]的文件,然后再IE缓存有一条名y/的记录,internet地址为 cookie:administrator@test.com/y,反复访问刷新后,A和B的cookie总会不一样,文件名分别在[1],[2]之间变换,反正就不会是一个文件。

3.反复分析

比较cookie和缓存中文件,发现就是x&y不一至,于是动手把A下的x系统和B下的y系统的webapp name都改成统一的,再试,成功了!两个系统可以合并到一个cookie中了。

4.总结

要想在两个二级域名下共享cookie,第一,设定的cookie要设定setDomain(一级域名);第二,访问的两个系统的webapp name一至。

如果两个系统直接是基于域名跑的,http://A.test.com,http://B.test.com,就没有后面那个修改webapp name的问题了,只要确保写cookie时,setDomain(一级域名),这里是"test.com"。


转载于:http://blog.sina.com.cn/s/blog_4c55c3a40100c6pm.html

上一篇‡: [转]身份证号码的规则及验证原理

下一篇‡: [转]c#中抽象类和接口的相同点跟区别

最近回复