Ucenter整合网站同步登陆

这几天一直在弄 Ucenter 同步登陆的问题,才仔细发现,其实同步登陆就是远程执行了 js脚本。。。

string uc_user_synlogout()
string uc_user_synlogin(integer uid)

返回的类型都是字符串,所以返回的字符串一定要在 网页中输出 才可同步。最好网页在进行延时。

还有一个问题就是 同步登陆的cookie有效期。在ucenter1.6版本里面 uc_user_synlogin()方法已经扩展了几个字段。

function uc_user_synlogin($uid, $cookietime = 0, $weiboToken = '', $qqToken = '', $qqOpenid = '') {
 $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, 'cookietime' => $cookietime, 'weibo_token' => $weiboToken, 'qq_token' => $qqToken, 'qq_openid' => $qqOpenid));
 } else {
 $return = '';
 }
 }
 return $return;
}

可以看出,第二个参数是有效期。传了第二个参数没有用,还需要修改 ucenter/control/user.php 里面的 onsynlogin() 方法
$this->init_input();
修改为
$this->init_input();
$cookietime = $this->input(‘cookietime’);
还有一个地方

$synstr .= ‘<script type=”text/javascript” src=”‘.$app[‘url’].’/api/’.$app[‘apifilename’].’?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’])).'” reload=”1″></script>’;
修改为
$synstr .= ‘<script type=”text/javascript” src=”‘.$app[‘url’].’/api/’.$app[‘apifilename’].’?time=’.$this->time.’&code=’.urlencode($this->authcode(‘cookietime=’.$cookietime.’&action=synlogin&username=’.$this->user[‘username’].’&uid=’.$this->user[‘uid’].’&password=’.$this->user[‘password’].”&time=”.$this->time, ‘ENCODE’, $app[‘authkey’])).'” reload=”1″></script>’;
这样就可以能有 cookie有效期了,discuz本来是默认的
$cookietime = 31536000;