加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 湛江站长网 (https://www.0759zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

从源码来看Discuz Ucenter同步

发布时间:2022-06-30 12:37:09 所属栏目:教程 来源:互联网
导读:Discuz是Ucenter的一个应用.Ucenter包含Server和Client,Discuz2.5x 内置有Ucenter server. 下面用Login来讨论这是如何实现同步的。 登录过程用户登录,Dz调用的是 class/class_member.php 中的 on_login()方法,用户输入的信息存在一个全局的$_G 数组中。
  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.
 
  这里看到fsockopen()的第一个参数是($ip ? $ip : $host),再F3一下$ip 和 $host,结果发现是配置文件里面的UC_DBHOST和UC_IP,所以大家得注意了,设置了UC_IP的话ucenter client会忽略UC_DBHOST的设置.

(编辑:PHP编程网 - 湛江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!