帝国cms整合discuz ucenter后只能单相同步的解决办法

我们在用帝国cms整合ucenter时,有时会遇到无法同步,或在帝国cms端登录退出可以实现同步,而在discuz端登陆退出时帝国端无法应的问题,反之也有可能dz端登陆帝国端可以,而帝国端登陆dz端无反应。这里和大家分享一下可能造成无法同步的原因,供大家参考。

一、查看帝国cms目录下的/e/config.inc文件,仔细看每项后边的注释,严格按照实际参数填写。如果不懂怎么填,可以参考ucenter内给出的“应用的 UCenter 配置信息”,特别是5、14行,最好填写为相应的ip或域名。

折叠PHP 代码
  1. define('UC_CONNECT''mysql');              // 连接 UCenter 的方式: mysql/NULL, 默认为空时为 fscoketopen()  
  2.                             // mysql 是直接连接的数据库, 为了效率, 建议采用 mysql  
  3.   
  4. //数据库相关 (mysql 连接时, 并且没有设置 UC_DBLINK 时, 需要配置以下变量)  
  5. define('UC_DBHOST''127.0.0.1');           // UCenter 数据库主机  
  6. define('UC_DBUSER''root');                // UCenter 数据库用户名  
  7. define('UC_DBPW''');                  // UCenter 数据库密码  
  8. define('UC_DBNAME''discuz');              // UCenter 数据库名称  
  9. define('UC_DBCHARSET''gbk');              // UCenter 数据库字符集  
  10. define('UC_DBTABLEPRE''discuz.pre_ucenter_');         // UCenter 数据库表前缀(格式:数据库.前缀)  
  11.   
  12. //通信相关  
  13. define('UC_KEY''abc1234');                // 与 UCenter 的通信密钥, 要与 UCenter 保持一致  
  14. define('UC_API''http://127.0.0.1/bbs/uc_server'); // UCenter 的 URL 地址, 在调用头像时依赖此常量  
  15. define('UC_CHARSET''gbk');                // UCenter 的字符集  
  16. define('UC_IP''');                    // UCenter 的 IP, 当 UC_CONNECT 为非 mysql 方式时, 并且当前应用服务器解析域名有问题时, 请设置此值  
  17. define('UC_APPID', 2);                  // 当前应用的 ID,设置ECMS在Ucenter的ID应用  
  18. define('UC_PPP''20');  
  19.   
  20.   
  21. //同步登录 Cookie 设置  
  22. $cookiedomain = '';             // cookie 作用域  
  23. $cookiepath = '/';          // cookie 作用路径  

二、查看ucenter内的应用列表是否通信成功,如果不成功,检查信息填写是否有问题。

QQ图片20160225181516.jpg

三、进入discuz后台,点击 站长 - ucenter 设置,查看“UCenter 数据库服务器”、“ UCenter 访问地址”两项填写是否为正确可访问的地址。

QQ图片20160225181753.jpg

四、如果帝国cms端登陆退出可以同步到discuz,但dz端登陆退出不能同步到帝国端,可以将 /uc_server/data/cache/apps.php 复制到 /uc_client/data/cache/ 文件夹内,覆盖。即可解决。(原因为dz端缓存问题导致无法同步)

五、如果第四步无法成功,接着往下看。

有很多程序整合discuz后,UC中显示通信成功,在整合端登陆注销,DZ也会跟随同步登陆注销,但是反过来在DZ中登陆注销,整合端却不会同步,没有任何变化。这其实是dz的bug,经过查询发现,原来是dz登陆注册的时候没有向UC返回状态信息,导致无法同步。

可用下面的方法解决:

打开 /uc_client/client.php 文件

找到310行左右,如下函数

折叠PHP 代码
  1. function uc_user_synlogin($uid) {  
  2.         $uid = intval($uid);  
  3.         if(@include UC_ROOT.'./data/cache/apps.php') {  
  4.                 if(count($_CACHE['apps']) > 1) {  
  5.                         $return = uc_api_post('user''synlogin'array('uid'=>$uid));  
  6.                 } else {  
  7.                         $return = '';  
  8.                 }  
  9.         }  
  10.         return $return;  
  11. }  
  12.   
  13. function uc_user_synlogout() {  
  14.         if(@include UC_ROOT.'./data/cache/apps.php') {  
  15.                 if(count($_CACHE['apps']) > 1) {  
  16.                         $return = uc_api_post('user''synlogout'array());  
  17.                 } else {  
  18.                         $return = '';  
  19.                 }  
  20.         }  
  21.         return $return;  
  22. }  

替换为

折叠PHP 代码
  1. function uc_user_synlogin($uid) {  
  2.         $uid = intval($uid);  
  3.         if(@include UC_ROOT.'./data/cache/apps.php') {  
  4.                 if(count($_CACHE['apps']) > 1) {  
  5.                         $return = uc_api_post('user''synlogin'array('uid'=>$uid));  
  6.                 } else {  
  7.                         $return = uc_api_post('user''synlogin'array('uid'=>$uid));  
  8.                 }  
  9.         }  
  10.         return $return;  
  11. }  
  12.   
  13. function uc_user_synlogout() {  
  14.         if(@include UC_ROOT.'./data/cache/apps.php') {  
  15.                 if(count($_CACHE['apps']) > 1) {  
  16.                         $return = uc_api_post('user''synlogout'array());  
  17.                 } else {  
  18.                         $return = uc_api_post('user''synlogout'array());  
  19.                 }  
  20.         }  
  21.         return $return;  
  22. }  

这样就可以实现双向同步了。有什么问题大家可以在此留言,此为discuz的bug,希望后期会更新,不过dz已经有许久未更新了。

Tags: 整合   discuz   同步   ucenter
cms大学,为帝国cms用户提供动力
Copyright © 2016 CmsDX.com All Rights Reserved.