PHP session 跨域 登录
现在有两个服务器1 |
|
1 |
|
如果单点登录这么容易搞得话,那些 SSO 服务商不都要倒闭了?
session 依靠 cookie 携带的 sessionid 做唯一性识别
而正常的 cookie 是不能跨域的。虽然利用一些技术手段可以实现 cookie 跨域,但这毕竟是利用了规则上的漏洞,并不可取。
我们知道,如果一个网站有设置了失效期的 cookie 的话,当浏览结束时就会在浏览器缓冲区留下一个以该网站域名的 cookie 文件。当再次访问该网站时,这个上次保存的 cookie 就会被发送回去
因此,你只要在访问 www.test1.com 的时候,设法留下一个 www.test2.com 的 cookie 文件
那么你再访问 www.test2.com 的时候就能实现同步了
怎么留?在 www.test1.com 返回的页面中用 iframe 或 js 访问一下 www.test2.com 的特定文件
当然,这只是基础,需要考虑的问题远不止这点
如果单点登录这么容易搞得话,那些 SSO 服务商不都要倒闭了?
session 依靠 cookie 携带的 sessionid 做唯一性识别
而正常的 cookie 是不能跨域的。虽然利用一些技术手段可以实现 cookie 跨域,但这毕竟是利用了规则上的漏洞,并不可取。
我们知道,如果一个网站有设置了失效期的 cookie 的话,当浏览结束时就会在浏览器缓冲区留下一个以该网站域名的 cookie 文件。当再次访问该网站时,这个上次保存的 cookie 就会被发送回去
因此,你只要在访问 www.test1.com 的时候,设法留下一个 www.test2.com 的 cookie 文件
那么你再访问 www.test2.com 的时候就能实现同步了
怎么留?在 www.test1.com 返回的页面中用 iframe 或 js 访问一下 www.test2.com 的特定文件
当然,这只是基础,需要考虑的问题远不止这点
那请问老大,我这样处理行不行
在www.test2.com里面的login.php文件里面写上创建cookie的代码
1 |
|
只要 www.test2.com/login.php 是在 www.test1.com 返回的页面 里面调用的就可以
就是说你在访问 www.test1.com 的同时也访问了 www.test2.com
这样 www.test1.com 的 cookie 供访问 www.test1.com 用
www.test2.com 的 cookie 供访问 www.test2.com 用
只要 www.test2.com/login.php 是在 www.test1.com 返回的页面 里面调用的就可以
就是说你在访问 www.test1.com 的同时也访问了 www.test2.com
这样 www.test1.com 的 cookie 供访问 www.test1.com 用
www.test2.com 的 cookie 供访问 www.test2.com 用
怎么样才叫做在返回的页面里面调用?
www.test1.com里面index.php
使用登录成功之后访问www.test2.com的方法,这个算不算是调用了!
实际情况是这样
www.test1.com里面login.php里面登录成功之后使用,
1 |
|
1 |
|
“在 www.test1.com 返回的页面里面调用”是指请求是从浏览器发出的,这样返回的 cookie 才会被浏览器保存
“在 www.test1.com 返回的页面里面调用”是指请求是从浏览器发出的,这样返回的 cookie 才会被浏览器保存
1 |
|
把session单独存入数据库或者memcache之类的”内存数据库”中,然后各个网站读取的时候全部从session 数据库中获取
把session单独存入数据库或者memcache之类的”内存数据库”中,然后各个网站读取的时候全部从session 数据库中获取
简单明了。大版有什么高见呢。。