php ucenter原理,深入挖掘Discuz Ucenter同步登录过程原理分析

深入挖掘discuz ucenter同步登录过程原理分析,哈哈,其实纯属标题党,主要就是做了一个思路分析而已。

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的设置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值