首页 | 站长免费中心 | 新手上路 | 网站运营 | 网页制作 | 图片设计 | 动画设计 | 网页编程 | 网页特效 | 本站专题 | 虚拟主机 | 域名注册 | 网站建设 | 程序下载
       免费空间资源 | 新闻咨询 | 免费域名 | 免费网盘 | 网站推广 | 网站策划 | 建站经验 | 网站优化 | 网页代码 | 源码下载 | 音乐小偷 | 网络赚钱 | 论坛交流
网站建设
网站建设
虚拟主机
虚拟主机
域名注册
域名注册
711网络首页
站长工具
站长工具
网站源码
网站源码
站长论坛
站长论坛

 711网络 网页编程PHP编程

Discuz中的同步登录

来源: 网页教学网    日期:2009-3-11
 

Discuz中的同步登录,意思很明白了,那它是如何实现的呢?

依附于Discuz UCenter的子应用都会有一个选项:

 

意思很明白了,那它是如何实现的呢?

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验证的应用来说,就实现了同步登录。



更多的Discuz中的同步登录请到论坛查看: http://BBS.TC711.COM



【 双击滚屏 】 【 评论 】 【 收藏 】 【 打印 】 【 关闭 】 来源: 网页教学网    日期:2009-3-11   

发 表 评 论
查看评论

  您的大名:
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
认证编码: 刷新验证码
点评内容: 字数0
  精品推荐  
  本月推荐  
  友情赞助  

关于我们 | 联系我们 | 广告投放 | 留言反馈 | 免费程序 | 虚拟主机 | 网站建设 |  网站推广 |  google_sitemap baidu_sitemap RSS订阅
本站所有资源均来自互联网,如有侵犯您的版权或其他问题,请通知管理员,我们会在最短的时间回复您
Copyright © 2005-2015 Tc711.Com All Rights Reserved 版权所有·711网络   蜀ICP备05021915号
110网监备案 信息产业备案 不良信息举报