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