单点登录


域名不是简单父子域名的关系,所以直接的cookie共享是不可行的。提供一种比较好做的方案,假设你有三个不同域名,a.com, b.com, ,将其中之一作为真正的登陆入口,所有的域名下发起的登陆,全部重定向到这个节点,这里假设选择 为统一登入节点,为了方便说明,把 叫做主节点,其余叫做从节点。

假设现在从任意站点发出登陆请求,最终都被带到 ,用户输入登陆信息,假设登陆成功,返回一个登陆成功中间页面,在这个页面里,包含下面html代码
<iframe width="0" height="0" src="https://b.com/sso.php?sessid=xxxxxxxxxxxx&sfkey=xxxxxxxxxxx"></iframe> <iframe width="0" height="0" src="https://c.com/sso.php?sessid=xxxxxxxxxxxx&sfkey=xxxxxxxxxxx"></iframe> 
sessid是登陆成功以后的session ID,sfkey是一个安全码,这两个串在login.php里绑定到当前登陆的用户记录上。

这个时候 实际已经登陆完毕,获得了PHPSESSID的cookie。两个iframe的作用是把获得的session id立刻同步到从节点上,从节点的sso.php获得sessid和sfkey后,首先校验这个配对是否存在,如果存在,立刻把sessid值设为当前session id
session_id($_GET['sessid']); // 使用a.com产生的session id
session_start();
sso.php请求完毕后,b.com和c.com这两个站点就获得了和a.com一样的PHPSESSID cookie;

这个页面会把用户重定向回所来自的页面(到达login.php的时候记住了),重定向完成后,用户已经在所有网站完成了同步登陆。

发送iframe请求的时候使用加密的sessid=xxxxxx里的sessid,从节点的sso.php获取密文后解密才获得真实的session id

你可以用单独域名来作为登陆主节点,比如 ,而不用a b c中的任意一个, 做且仅作登陆服务。

转载于:https://www.cnblogs.com/netRob/p/5000055.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值