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

来源:互联网 发布:淘宝买家秀 情趣福利 编辑:程序博客网 时间:2024/06/01 17:05

实现原理:

子站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保存部分的代码上面示例已经给出不再重复了。

0 0