几乎每个应用在整合UC的时候都会遇到无法同步登陆同步退出的情况,今天分析下原因
首先我们的项目会将uc_client这个文件夹原封不动的拷贝到项目根目录,
public function inteLogin($loginname,$password) {
$this->_initUC();
if (true === $this->uc_Integration) {
if (true === XValid::isEmail($loginname)) {
$logintype = 2;
}
else {
$logintype = 0;
}
if (UC_CHARSET != OESOFT_CHARSET) {
$uc_loginname = XHandle::utfToGbk($loginname);
}
else {
$uc_loginname = $loginname;
}
$this->ucinfo = uc_user_login($uc_loginname,$password,$logintype,0);
if ($this->ucinfo[0] >0) {
//同步登陆
//print_r($this->ucinfo);
echo uc_user_synlogin($this->ucinfo[0]);
//如下是登陆本系统的逻辑
$this->_loginUcToLove($password);
}
}
}
我只截取了一段代码,代码是先调用client.php的uc_user_login方法,然后判断返回的uid是否存在,存在的话就echo uc_user_synlogin($this->ucinfo[0]);这样就实现了同步登陆。但是你也许会遇到一个问题,就是还是无法同步登陆,我们看代码
function uc_user_synlogin($uid) {
$uid = intval($uid);
if(@include UC_ROOT.'./data/cache/apps.php') {
if(count($_CACHE['apps']) > 1) {
$return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
} else {
$return = '';
}
}
return $return;
}
发现count($_CACHE['apps']) > 1,也就是在apps.php中的apps数组必须大于1才会调佣,否则不调用,这里我们需要注意的是你的应用里面如果是在建立之前拷贝的uc_client代码,则这个不会大于1,没关系,我们拷贝过去就行了。apps.php
同步退出也是同理的,因为他这个是发送js实现同步退出,因此
public function inteLogout() {
$this->_initUC();
if (true === $this->uc_Integration) {
echo uc_user_synlogout();
}
}
也要记得上面是echo,而不是Return
我们在做应用开发的时候,包含了两个文件,一个当然是配置文件了,不管你是在后台填写的还是直接写到文件中的,包含进来就行了,然后就是client.php,client.php是处理程式。
本文档的代码引用的action.passport.php以及model.uc.php中的代码如需完整的,打开他们来看下就知道了