从源码看Discuz Ucenter同步
发布:smiling 来源: PHP粉丝网 添加日期:2014-04-22 10:55:11 浏览: 评论:0
Discuz是Ucenter的一个应用.
Ucenter包含Server和Client,Discuz2.5x 内置有Ucenter server.
下面用Login来讨论这是如何实现同步的。
登录过程
用户登录,Dz调用的是 class/class_member.php 中的 on_login()方法,用户输入的信息存在一个全局的$_G 数组中。核心内容是
$ucsynlogin = $this->setting['allowsynlogin'] ? uc_user_synlogin($_G['uid']) : '';
字面意思理解就是,检查ucenter中检查该应用是否开启同步登陆,开启则调用uc_user_synlogin().
有童鞋在debug时遇到DZ的$ucsynlogin为空(正常的话应该是一串JS代码) , 请检查全局的数组的 allowsynlogin 字段内容是否正确。也可直接忽略这步。将上述代码改成$ucsynlogin =uc_user_synlogin($_G['uid']);
uc_user_synlogin
跟进该方法后几个核心方法调用的路线大概如下:
uc_user_synlogin() ==> uc_api_post() ==> uc_fopen2() ==> uc_fopen() ==> fsockopen()
uc_fopen() 位于 client.php 中,从字面的意思看看这个方法就可以知道client利用socket与server建立连接,通知server进行登陆通知,server对通知做处理后返回给client一串加密的JS代码,client将这串代码输出调用后实现对所有其他应用的登录,从而实现同步登陆,这里用到了P3P.
如果童鞋的uc_user_synlogin无返回值(目测大部分童鞋都是这个问题),大可跟下这个方法,Trace fsockopen()的参数是否正确,正确的话一般来说一定能够同步登陆的.
这里看到fsockopen()的第一个参数是($ip ? $ip : $host),再F3一下$ip 和 $host,结果发现是配置文件里面的UC_DBHOST和UC_IP,所以大家得注意了,设置了UC_IP的话ucenter client会忽略UC_DBHOST的设置.
Tags: 源码 Discuz Ucenter同步
相关文章
- ·ucenter忘记密码以后如何找回,重置更新密码源码 (2014-04-22)
- ·Discuz、UCenter登陆管理后台自动退出的解决方法(2013-11-15)
- ·Discuz、UCenter登陆管理后台自动退出的解决方法(2014-01-10)
- ·phpcms V9 整合 Discuz! X2.5 ucenter通信教程--同步注册和登录(2014-04-22)
- ·Discuz!X2.5和UCenter_1.6.0(2014-07-23)
- ·利用ucenter实现discuz同步登陆和注册(2014-11-28)
- ·ucenter整理tipask问答系统与discuz单项同步问题解决方法(2015-04-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)