You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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库:

  1. 在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
        ];
    }
}
  1. 在控制器中调用库:
$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:25:48