最近在做通行证功能,即单点登陆!即用户从www.a.com登陆后,www.b.com自动登陆、注销!
实现该功能有二种途径:
1.基于数据库(在此不讨论)
2.基于Cookie
由于某种原因需要使用Cookie来实现信息同步,基于安全性考虑,默认情况下浏览器不允许访问域外的资源(Cookie等),所以不能以跨域的形式来直接访问另外一个域的cookie。有没有可能使2个域共享一个cookie文件呢?不可能!那么有没有变通的办法呢?有的,也就是在浏览a域页面的同时,隐藏去执行一下b域的某个页面,而b域的某个页面所做的动作为生成cookie,这样不就把cookie保存至b域中了吗?
一、环境设置
1.打开X:/WINDOWS/system32/drivers/etc(X 为系统安装路径)
2.用记事本打开hosts,在
127.0.0.1 localhost下添写二行记录
192.168.18.104 www.a.com.cn
192.168.18.104 www.b.com.cn
二、代码编写
工作流程
a域通过script来访问b域的接口文件,b域接口文件通过接收a域传入的参数来实现对b域cookie的写操作
1.编写b域的接口文件,命名为b_setcookie.php
2.创建a域下的文件test.php,并使用脚本来调用b域的b_setcookie.php
3.测试
在FireFox中输入www.a.com/test.php,就会发现有b域的cookie文件生成了
在FireFox下使用工具->选项->隐私->使用自定义历史记录设置->显示Cookie
这里有一个问题,如果用IE等浏览器执行www.a.com/test.php时,就不能生成b域的Cookie,这时我们需要在b_setcookie.php中加一句话