整合Ecshop与Discuz通讯成功,同步登录、退出不一致

Fun小编在研究discuz和ecshop的同步登录问题,看了网站很多解决方案,不过都不能完全解决同步登录的问题。下面整合了可以解决完全同步的方案,小编自己亲身测试过是么问题的:
1.ecshop登录,discuz也登录,但ecshop退出,discuz却保持登录状态
修改ecshop/includes/lib_common.php
将$res = call_user_func_array($func, $params);替换成$res = call_user_func_array($func, empty($params) ? array('0') : $params);  可以实现ecshop登录、退出后,discuz也跟着做同样的动作,但是discuz登录、退出,ecshop都不能跟着同样动作。

2.解决discuz和ecshop完全同步:
打开uc_client/data/cache/apps.php发现这里面只有一个站点,那么将其复制一份粘贴到下面,改一下相应的信息,如下图:
\

3.从ecshop登录,discuz退出,会出现ecshop没有退出的现象。由于cookie值域的问题。因为discuz在退出的时候会用JS调用到这个api来同步退出。
修改ecshop/api/uc.php中的set_cookie函数,约414行替换成以下代码:
setcookie('ECS[user_id]', '', $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie('ECS[username]', '', $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie('ECS[email]', '', $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
 
4.打开ecshop/includes/modules/integrates/ucenter.php
ucenter($cfg)函数(约87行)$this->is_ecshop = 1;后面添加代码:
$this->cookie_path = $cfg['cookie_path'];
$this->cookie_domain = $cfg['cookie_domain'];
 
第468行set_cookie($username='')函数加入域范围,替换代码:
/* 摧毁cookie */
$time = time() - 3600;
setcookie("ECS[user_id]", '', $time, $this->cookie_path, $this->cookie_domain); 
setcookie("ECS[password]", '', $time, $this->cookie_path, $this->cookie_domain);
这样就可以实现完全同步了。

欢迎转载,原文地址:http://www.lrfun.com/html/technology/dz/2015/0324/38.html

上一篇:Ecshop与Discuz整合,实现同步登录
下一篇:没有了