我们在用帝国cms整合ucenter时,有时会遇到无法同步,或在帝国cms端登录退出可以实现同步,而在discuz端登陆退出时帝国端无法应的问题,反之也有可能dz端登陆帝国端可以,而帝国端登陆dz端无反应。这里和大家分享一下可能造成无法同步的原因,供大家参考。
一、查看帝国cms目录下的/e/config.inc文件,仔细看每项后边的注释,严格按照实际参数填写。如果不懂怎么填,可以参考ucenter内给出的“应用的 UCenter 配置信息”,特别是5、14行,最好填写为相应的ip或域名。
折叠展开PHP 代码
- define('UC_CONNECT', 'mysql');
-
-
-
- define('UC_DBHOST', '127.0.0.1');
- define('UC_DBUSER', 'root');
- define('UC_DBPW', '');
- define('UC_DBNAME', 'discuz');
- define('UC_DBCHARSET', 'gbk');
- define('UC_DBTABLEPRE', 'discuz.pre_ucenter_');
-
-
- define('UC_KEY', 'abc1234');
- define('UC_API', 'http://127.0.0.1/bbs/uc_server'); // UCenter 的 URL 地址, 在调用头像时依赖此常量
- define('UC_CHARSET', 'gbk');
- define('UC_IP', '');
- define('UC_APPID', 2);
- define('UC_PPP', '20');
-
-
-
- $cookiedomain = '';
- $cookiepath = '/';
二、查看ucenter内的应用列表是否通信成功,如果不成功,检查信息填写是否有问题。

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

四、如果帝国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 代码
- function uc_user_synlogin($uid) {
- $uid = intval($uid);
- if(@include UC_ROOT.'./data/cache/apps.php') {
- if(count($_CACHE['apps']) > 1) {
- $return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
- } else {
- $return = '';
- }
- }
- return $return;
- }
-
- function uc_user_synlogout() {
- if(@include UC_ROOT.'./data/cache/apps.php') {
- if(count($_CACHE['apps']) > 1) {
- $return = uc_api_post('user', 'synlogout', array());
- } else {
- $return = '';
- }
- }
- return $return;
- }
替换为
折叠展开PHP 代码
- function uc_user_synlogin($uid) {
- $uid = intval($uid);
- if(@include UC_ROOT.'./data/cache/apps.php') {
- if(count($_CACHE['apps']) > 1) {
- $return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
- } else {
- $return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
- }
- }
- return $return;
- }
-
- function uc_user_synlogout() {
- if(@include UC_ROOT.'./data/cache/apps.php') {
- if(count($_CACHE['apps']) > 1) {
- $return = uc_api_post('user', 'synlogout', array());
- } else {
- $return = uc_api_post('user', 'synlogout', array());
- }
- }
- return $return;
- }
这样就可以实现双向同步了。有什么问题大家可以在此留言,此为discuz的bug,希望后期会更新,不过dz已经有许久未更新了。