UCenter跨域通信求帮助
发布网友
发布时间:2022-05-25 06:34
我来回答
共1个回答
热心网友
时间:2024-03-15 11:03
ucenter实现跨域单点登陆的方法
1.每一个应用都包含uc_client,拿uchome举例
2.uchome登陆时访问source/do_login.php 的getpassport函数,getpassport通过uc_client 直接连ucenter的数据库,实现当前站点的登陆
3.uchome然后调用$ucsynlogin = uc_user_synlogin($setarr['uid']);实现跨域登陆
4.在uc_user_synlogin函数里再用uc_client/client.php的fsockopen去访问ucenter下的index.php默认超时15秒
5.在ucenter下的index.php根据请求的model和action和appid请求control/user.php 的onsynlogin函数
6.onsynlogin函数通过循环,对系统下的所有应用(在data/cache/setting.php)做JS调用如下
$synstr .= '<script type="text/javascript" src="'.$app['url'].'/api/uc.php?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogin&username='.$this->user['username'].'&uid='.$this->user['uid'].'&password='.$this->user['password']." mce_src="'.$app['url'].'/api/uc.php?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogin&username='.$this->user['username'].'&uid='.$this->user['uid'].'&password='.$this->user['password']."&time=".$this->time, 'ENCODE', $app['authkey'])).'"></script>';
7.返回到uchome.在每个应用下的api目录有个uc.php文件查找$action == 'synlogin'下面是进行cookie设置
obclean();
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
这两行是必须的
8.这样就在所有ucenter知道的应用下添加了cookie实现了跨域登陆