利用P3P远程跨域保存cookie实现SSO单点登录功能

实现原理:

子站1登录后,发送信息给主站服务器,服务器再返回给子站1其他子站的cookie保存接口。

实现方式:

1,子站1登录后,使用隐藏的<iframe> 内嵌框架,其scr为主站服务器的通知接口。

2,主站收到子站的通知信息后,返回给子站1,其他各个站点的cookie保存接口,返回为<script scr="xxx"></script>

xxx为接口地址,参数传递使用get方式

3,最主要的就是子站远程跨域保存cookie。这里使用P3P方式

示例为

header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie('uc_uid',$uid,time()+60, "/", "admin1.rockhippo.com");

其中 “admin1.rockhippo.com” 为当前子站的域名。


ps:有一个重点需要了解的就是,其中有2个请求,一个是请求给主站服务器,还有一个就是服务器返回回来,向各个子站的请求,都必须在页面上完成。


最后,给出实现上主要的代码片段

登陆后成功后使用:

$url= 'http://www.rhpuc.uc'.$this->notice.'?uid='.$uid;
		
echo '<iframe id="crossdomain" width="0" height="0" style="visibility:hidden;" src="'.$url.'" ></iframe>';

服务器主站的接收接口:

$ix = new PUc_IndexModel();
$result = $ix->UcList('');
foreach ($result['allrow'] as $key=>$val){
	$url = $val['weburl'];
	$url.= '/hpuc/index.php?uid='.$uid.'&appid='.$val['appid'].'&token='.$val['token'].'&action=s_cookie';
	echo "<script src='$url'></script>";
}

这部分主要是读取其他站点的地址,然后echo出各个站点的cookie保存地址


cookie保存部分的代码上面示例已经给出不再重复了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值