Discuz中如何实现同步登陆?

Discuz中如何实现同步登陆?下面分享给大家能够实现同步登陆的相关代码段:

案例
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 .= '';   
                    }   
                }   
                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);   
        } 

对于Discuz这种基于COOKIE验证的应用来说,也就实现了同步登陆的效果了。

你可能感兴趣的:(网页设计)