如何将WordPress会话数据共享至CodeIgniter系统
在CodeIgniter 3中获取WordPress会话数据的实现方案
核心原理
WordPress登录后会生成包含会话信息的Cookie(默认名为wordpress_logged_in_xxx),由于两个站点同域名同主机,CodeIgniter可以读取该Cookie,通过WordPress的核心函数验证会话有效性并提取用户数据。
具体实现步骤
1. 在CodeIgniter中加载WordPress核心文件
在CI的控制器或自定义逻辑中,引入WordPress的wp-load.php文件,以此调用WP核心函数。路径需根据实际部署调整:
// 假设WordPress安装在网站根目录,CI在crm子目录 $wp_path = realpath(FCPATH . '../'); require_once($wp_path . '/wp-load.php');
注意:确保CI与WordPress的PHP环境版本兼容,避免出现函数冲突或加载错误。
2. 验证会话并获取用户信息
通过WP内置函数验证会话合法性,再提取登录用户的核心数据:
// 初始化WP会话上下文 wp_set_current_user(0); wp_validate_auth_cookie('', 'logged_in'); // 获取当前登录用户对象 $current_user = wp_get_current_user(); // 判断用户是否已登录 if ($current_user->ID != 0) { // 提取所需用户字段 $user_data = [ 'id' => $current_user->ID, 'username' => $current_user->user_login, 'email' => $current_user->user_email, 'display_name' => $current_user->display_name // 可根据业务需求添加更多字段,如用户角色、头像地址等 ]; // 将用户数据存入CI会话,供后续业务使用 $this->session->set_userdata('wp_user', $user_data); } else { // 用户未登录时的处理逻辑,如跳转WP登录页或提示未授权 }
3. 优化:封装为CodeIgniter库(可选)
为了代码复用,可将上述逻辑封装成CI库:
- 在
application/libraries目录创建WpUser.php:
class WpUser { protected $CI; protected $current_user; public function __construct() { $this->CI =& get_instance(); // 加载WP核心文件 $wp_path = realpath(FCPATH . '../'); require_once($wp_path . '/wp-load.php'); $this->init_user_session(); } private function init_user_session() { wp_set_current_user(0); wp_validate_auth_cookie('', 'logged_in'); $this->current_user = wp_get_current_user(); } public function is_logged_in() { return $this->current_user->ID != 0; } public function get_user_data() { if (!$this->is_logged_in()) { return null; } return [ 'id' => $this->current_user->ID, 'username' => $this->current_user->user_login, 'email' => $this->current_user->user_email, 'display_name' => $this->current_user->display_name ]; } }
- 在控制器中调用库:
$this->load->library('wpuser'); if ($this->wpuser->is_logged_in()) { $wp_user = $this->wpuser->get_user_data(); $this->session->set_userdata('wp_user', $wp_user); }
4. 关键注意事项
- Cookie配置:WordPress默认Cookie路径为
/、域名为当前主域名,CI子站点可直接读取;若WP修改过Cookie参数,需确保CI能访问对应Cookie。 - 性能优化:加载
wp-load.php会初始化整个WP环境,可能影响CI响应速度,可考虑缓存用户数据,或仅在需要验证用户时加载WP核心。 - 安全验证:必须通过
wp_validate_auth_cookie()验证会话合法性,禁止直接信任Cookie内容,避免伪造会话的安全风险。 - 版本兼容:确保使用的WordPress版本支持
wp_validate_auth_cookie()和wp_get_current_user()(这两个是WP核心函数,多数版本兼容)。
内容的提问来源于stack exchange,提问作者Manju Chaudhary
相关产品推荐
相关产品推荐

