核心思路与原理
在开始之前,我们需要理解整合的核心原理:

- 共享用户表:Dede 和 EcsShop 都有自己的用户表 (
dede_member和ecs_users),整合的关键就是让这两个表共享数据。 - 统一登录流程:
- 当用户在 Dede 站点登录时,除了在 Dede 的 session 中记录登录状态,我们还会额外执行一段代码,将用户信息写入 EcsShop 的 session,并设置 EcsShop 的 cookie,从而实现 EcsShop 站点的“自动登录”。
- 反之,在 EcsShop 登录时,同样执行代码,让用户在 Dede 站点也“自动登录”。
- 统一注册流程:
- 我们将隐藏 EcsShop 的注册入口,所有用户都必须通过 Dede 的注册页面进行注册。
- 当用户在 Dede 注册时,除了向
dede_member表插入数据,我们还会同时向ecs_users表插入一条完全对应的用户记录。
准备工作
- 环境:一个本地或线上的 PHP + MySQL 环境。
- 程序:
- DedeCMS:建议使用稳定版本,如 V5.7 或 V5.8 SP1。
- EcsShop:建议使用稳定版本,如 V4.1.0 或 V4.1.2。
- 目录结构:为了方便管理,我们采用 “同目录级” 的安装方式。
- 将 DedeCMS 解压到网站根目录,此时根目录下有
dede/文件夹。 - 将 EcsShop 解压到网站根目录,此时根目录下有
ecs/文件夹。 - 最终的目录结构如下:
/wwwroot/ (网站根目录) ├── /dede/ (DedeCMS 程序目录) ├── /ecs/ (EcsShop 程序目录) ├── /data/ (DedeCMS 数据目录,权限设置为 755 或 777) ├── ... └── index.php (网站首页,可以指向 dede 或 ecs)
- 将 DedeCMS 解压到网站根目录,此时根目录下有
第一步:数据库准备与用户表结构统一
这是最关键的一步,我们需要确保两个用户表的核心字段能够对应起来。
- 安装 DedeCMS:正常安装 DedeCMS,记下数据库名、用户名、密码。
- 安装 EcsShop:使用与 DedeCMS 完全相同的数据库名、用户名、密码 进行安装,安装时,EcsShop 会自动创建自己的数据表,包括
ecs_users。 - 分析表结构:
- DedeCMS 用户表 (
dede_member):uid(用户ID, int)userid(用户名, varchar)pwd(密码, varchar, MD5加密)email(邮箱, varchar)uname(昵称, varchar)mtype(会员类型, varchar)jointime(注册时间, int)logintime(登录时间, int)loginip(登录IP, varchar)
- EcsShop 用户表 (
ecs_users):user_id(用户ID, int)user_name(用户名, varchar)password(密码, varchar, MD5加密)email(邮箱, varchar)user_rank(用户等级, int)reg_time(注册时间, int)last_login(最后登录时间, int)last_ip(最后登录IP, varchar)
- DedeCMS 用户表 (
两个字段名不同,但含义和类型基本可以一一对应。
第二步:修改 DedeCMS,实现统一注册和登录
我们需要修改 DedeCMS 的核心文件,让它在处理用户注册和登录时,同时操作 ecs_users 表。
1 修改用户注册文件 (member/reg_new.php)
找到 DedeCMS 根目录下的 member/reg_new.php 文件。

-
查找并修改用户数据处理部分: 在文件中找到类似
$inpwd = md5($password);的代码段,这是在处理用户提交的数据。 -
在插入 Dede 数据库之前,添加插入 EcsShop 数据库的代码:
// ... DedeCMS 原有代码,获取用户信息 $mid, $mname, $mpwd, $memail 等 ... // --- 以下是新增的 EcsShop 数据插入代码 --- // 1. 引入 EcsShop 的数据库配置文件 require_once(dirname(__FILE__) . '/../ecs/config.php'); // 2. 准备 EcsShop 需要的数据 $ecs_user_name = $mname; // 用户名 $ecs_password = $mpwd; // 密码 (已经是MD5格式) $ecs_email = $memail; // 邮箱 $ecs_reg_time = time(); // 注册时间戳 $ecs_user_rank = '0'; // 默认用户等级,根据你的EcsShop设置 // 3. 执行 SQL 插入到 ecs_users 表 // 注意:这里使用了 SQL 语句,确保你的 ECS 表前缀是 'ecs_',如果不是,请修改。 $sql = "INSERT INTO `ecs_users` (user_name, password, email, reg_time, user_rank) VALUES ('{$ecs_user_name}', '{$ecs_password}', '{$ecs_email}', '{$ecs_reg_time}', '{$ecs_user_rank}')"; $dsql->Execute('ecs', $sql); // 使用 Dede 的数据库执行对象 // --- 新增代码结束 --- // ... DedeCMS 原有代码,执行向 dede_member 表插入数据的操作 ...
说明:
require_once('../ecs/config.php');:引入 EcsShop 的数据库配置,这样$dsql->Execute('ecs', $sql)中的'ecs'参数会使用config.php中定义的$cfg_dbprefix(即 'ecs_') 作为表前缀。- 确保字段名和变量名正确对应。
2 修改用户登录文件 (member/index_do.php)
找到 DedeCMS 根目录下的 member/index_do.php 文件,这个文件处理登录请求。
-
找到登录成功后的代码块:通常在
if($dlogin == 1)条件判断内部。 -
在 Dede 设置登录 Session 之后,添加设置 EcsShop 登录状态的代码:
// ... DedeCMS 原有代码,登录成功后 ... // $cfg_ml->PutLoginInfo($uid); ... // --- 以下是新增的 EcsShop 登录同步代码 --- // 1. 引入 EcsShop 的数据库配置和公共函数库 require_once(dirname(__FILE__) . '/../ecs/config.php'); require_once(dirname(__FILE__) . '/../ecs/includes/lib_passport.php'); // 2. 获取当前登录用户信息 $user_id = $uid; // Dede 的 uid $user_name = $cfg_ml->M_UserName; // Dede 的用户名 $email = $cfg_ml->M_Email; // Dede 的邮箱 // 3. 调用 EcsShop 的函数同步登录 // 这会自动在 EcsShop 的 session 中写入用户信息,并设置 cookie if (function_exists('syncLogin')) { syncLogin($user_id); // EcsShop 的 passport 函数需要 user_id } // --- 新增代码结束 --- // ... DedeCMS 原有代码,跳转到登录成功页面 ... // ShowMsg('成功登录,正在进入...', $gourl, 0, 2000);
说明:
lib_passport.php是 EcsShop 处理用户登录的核心文件,里面包含了syncLogin()等关键函数。- 这样,当用户在 Dede 登录后,EcsShop 的 session 也会被激活,实现无缝跳转。
第三步:修改 EcsShop,实现反向登录同步
我们需要让用户在 EcsShop 登录后,也能在 Dede 站点自动登录。
1 修改 EcsShop 登录文件 (user.php)
找到 EcsShop 根目录下的 user.php 文件。
-
找到登录成功的处理逻辑:通常在
if ($_REQUEST['act'] == 'login')分支中,找到$user->login()函数调用之后。 -
在 EcsShop 设置登录 Session 之后,添加设置 Dede 登录状态的代码:
// ... EcsShop 原有代码 ... // $user->login($username, $password, $remember); ... // 登录成功后,会设置 ECS 的 session // --- 以下是新增的 Dede 登录同步代码 --- // 1. 引入 DedeCMS 的数据库配置文件 // 注意路径,从 ecs 目录看 dede 目录 require_once(dirname(__FILE__) . '/../dede/config.php'); // 2. 获取当前登录用户信息 (从 ECS 的 session 中获取) $ecs_user_id = $_SESSION['user_id']; // EcsShop 的 user_id $ecs_user_name = $_SESSION['user_name']; // EcsShop 的 user_name // 3. 查询 DedeCMS 的用户ID (因为两个表的ID可能不同) $dede_uid = $dsql->GetOne("SELECT uid FROM `dede_member` WHERE userid = '{$ecs_user_name}'"); if (is_array($dede_uid)) { $dede_uid = $dede_uid['uid']; // 4. 模拟 DedeCMS 的登录过程 // DedeCMS 的登录信息存储在 $_SESSION['member_V'] 中 $_SESSION['member_V'] = array( 'm_ID' => $dede_uid, 'm_LoginTime' => time(), 'm_LoginID' => $ecs_user_name ); // 5. 设置 DedeCMS 的 cookie (如果它有设置的话) // DedeCMS 的登录由其内部类处理,设置 session 即可。 // 如果需要 cookie,可以查看 Dede 登录代码,复制相关逻辑。 } // --- 新增代码结束 --- // ... EcsShop 原有代码,跳转到登录成功页面 ... // ecs_header("Location: user.php\n");
第四步:统一注册入口(可选但推荐)
为了更好的用户体验,我们应该隐藏 EcsShop 的注册页面,强制所有用户通过 DedeCMS 注册。
-
修改 EcsShop 模板:
- 打开 EcsShop 的模板文件,
themes/default/library/register.lbi(或对应的.dwt文件)。 - 找到注册表单,将其替换为一个指向 DedeCMS 注册页面的链接或提示信息。
- 将
<form action="user.php?act=act_register">...</form>替换为:<div style="text-align: center; padding: 20px;"> <p>新用户请先在网站首页进行注册。</p> <a href="/dede/member/reg_new.php">点击这里注册</a> </div>
- 打开 EcsShop 的模板文件,
-
修改 EcsShop 逻辑:
- 打开
user.php,找到act_register的处理部分。 - 在最前面添加一行代码,直接跳转到 Dede 的注册页面:
// 在 case 'register': 的开头 case 'register': // 强制跳转到 Dede 注册页面 ecs_header("Location: /dede/member/reg_new.php\n"); exit; break;
- 打开
第五步:测试与注意事项
-
测试流程:
- 注册测试:访问 Dede 的注册页面,注册一个新用户,然后去 EcsShop 的数据库
ecs_users表中查看,是否成功插入了数据。 - Dede 登录测试:用新注册的用户在 Dede 登录,然后直接访问 EcsShop 的任何需要登录的页面(如“我的账户”),看是否已经自动登录。
- Ecs 登录测试:退出登录,用该用户在 EcsShop 登录,然后访问 Dede 的会员中心,看是否已经自动登录。
- 退出登录测试:在一个站点退出登录,然后访问另一个站点,看是否也已退出。
- 注册测试:访问 Dede 的注册页面,注册一个新用户,然后去 EcsShop 的数据库
-
重要注意事项:
- 备份!备份!备份! 在修改任何核心文件之前,务必备份原始文件和数据库。
- 密码加密:本教程默认双方都使用 MD5 加密,如果一方使用 MD5+盐值等更复杂的加密方式,则需要编写额外的密码转换函数,这会使整合变得非常复杂。
- Session 冲突:确保 Dede 和 EcsShop 的 Session 名称(
session_name())不冲突,否则会互相干扰,通常默认情况下不会有问题。 - Cookie 域名:确保两个系统都在同一个主域名下,这样 cookie 才能共享。
www.example.com/dede和www.example.com/ecs。 - 升级问题:未来如果升级 Dede 或 EcsShop,这些修改过的文件可能会被覆盖,届时需要重新进行修改。
- 代码兼容性:不同版本的 Dede/EcsShop 文件路径和代码结构可能略有不同,本教程提供的是通用思路,请根据你实际下载的版本进行微调。
高级与扩展
- 统一退出登录:可以参考登录同步的思路,修改 Dede 和 EcsShop 的退出登录文件,让在一处退出时,另一处也清除 session。
- 单点登录 (SSO):如果网站结构更复杂(如多个子域名),可以考虑使用专业的 SSO 解决方案,这通常需要更复杂的架构设计,如使用中央认证中心。
这份教程涵盖了从原理到实践的完整流程,希望能帮助你成功整合 DedeCMS 和 EcsShop,如果在操作中遇到具体问题,可以提供错误信息,我们可以进一步探讨。
