首页 > 网站 > CMS建站 > 正文

Discuz中的同步登录

2020-03-24 18:18:35
字体:
来源:转载
供稿:网友
意思很明白了,那它是如何实现的呢?UC/Control/user.php中有一个onsynlogin方法,这里就是处理同步登录的。function onsynlogin() {
$this- init_input();
$uid = $this- input('uid');
if($this- app['synlogin']) {
if($this- user = $_ENV['user']- get_user_by_uid($uid)) {
$synstr = '';
foreach($this- cache['apps'] as $appid = $app) {
if($app['synlogin'] $app['appid'] != $this- app['appid']) {
$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']. time= .$this- time, 'ENCODE', $app['authkey'])).' reload= 1 /script
}
}
return $synstr;
}
}
return '';
} 当调用该方法时,实际上会去调用该应用下api/uc.php文件,将用户名、密码及时间戳做为参数传递。
以上是实现的第一步。第二步,当应用接收到UC的请求后,会调用uc_note类中的synlogin方法,该方法的核心是送一个P3P的HTTP头,然后种下COOKIE。$discuz_auth_key = md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);
header('P3P: CP= CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR ');
$uid = intval($uid);
$query = $this- db- query( SELECT username, uid, password, secques FROM .$this- tablepre. members WHERE uid='$uid'
if($member = $this- db- fetch_array($query)) {
_setcookie('sid', '', -86400 * 365);
_setcookie('cookietime', $cookietime, 31536000);
_setcookie('auth', _authcode( $member[password]/t$member[secques]/t$member[uid] , 'ENCODE', $discuz_auth_key), $cookietime);
} else {
_setcookie('cookietime', $cookietime, 31536000);
_setcookie('loginuser', $username, $cookietime);
_setcookie('activationauth', _authcode($username, 'ENCODE', $discuz_auth_key), $cookietime);
} 对于Disucz这种基于COOKIE验证的应用来说,就实现了同步登录。html教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表