ECShop与UCenter同步登录中的问题分析
| 问题描述 | 详细解释 |
set_cookie函数错误 |
在原始的ECShop代码中,当需要清除Cookie时,设置的时间戳是当前时间减去3600秒,即一个小时之前,这会导致Cookie被立即清除,这个函数在处理跨域登录时存在一个问题,因为ECSHOP和论坛可能位于不同的子目录下,例如ECSHOP在域名根目录,论坛在/bbs/子目录,当用户在论坛上登出时,论坛会向/api/uc.php发送登出请求,以清除ECSHOP的Cookie,原始代码中的问题在于,设置Cookie的路径没有考虑到这种情况,只设置了论坛子目录的路径,导致ECSHOP的Cookie无法被正确清除。 |
修复方案
修正后的set_cookie函数:

```php
function set_cookie($user_id=\"\", $user_name = '', $email = '') {
if (empty($user_id)) {
/* 摧毁cookie */
$time = time() 3600;
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']); // 修正后的路径
} else {
/* 设置cookie */
$time = time() + 3600 * 24 * 30;
setcookie("ECS[user_id]", $user_id, $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie("ECS[username]", $user_name, $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie("ECS[email]", $email, $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
}
}
```
更新ECSHOP的Ucenter插件文件:
除了uc.php的修改,还需要更新ECSHOP的Ucenter插件文件includes/modules/integrates/ucenter.php,以便正确处理跨域同步,具体修改部分应参照提供的图片或文档说明进行操作。
相关问题与解答
问题一:为什么在ECShop与UCenter整合后会出现用户注册检测不成功的问题?
答:这个问题通常是由于数据库配置文件没有正确修改导致的,大部分情况下,人们直接修改了数据库配置文件,但更简单的方法是在ECShop后台的会员整合设置中修改UCenter的数据库账号密码,并清除缓存。
问题二:在ECShop 2.7.2整合UCenter之后,为何EC用户能同步登录到Discuz! X,但UC_server始终显示通信失败,且Discuz! X的登录退出状态不能同步到ECShop?
答:这个问题可能是由于includes\modules\integrates\ucenter.php文件中的第52行代码报错所致,为了解决这个问题,可以尝试检查并修复该行代码,确保所有相关配置都已正确设置。
以上就是关于“ecshop的ucenter同步登陆uc.php 一点错误勘误”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!