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

如何在WordPress多站点跨子域名设置与获取会话通用变量?

WordPress多站点跨子域名共享Session/Cookie解决方案

嘿,这个问题我之前帮不少多站点用户搞定过——核心原因就是默认情况下,Session和Cookie的Domain是绑定单个子域的(比如www.sitename.com),导致hindi.sitename.com这类其他子站根本读不到。下面给你几个落地可行的方案,按需求选就行:

方案一:通过wp-config.php全局配置(推荐)

直接在WordPress根目录的wp-config.php里添加常量定义,一次性搞定所有站点的Cookie/Session共享:

// 关键:根域名前加英文点,让所有子域名都能访问
define('COOKIE_DOMAIN', '.sitename.com');
define('SESSION_COOKIE_DOMAIN', '.sitename.com');
// 设置Cookie路径为根目录,确保全站生效
define('COOKIEPATH', '/');
define('SITECOOKIEPATH', '/');

注意点:

  • 一定要加那个前置的.,比如.sitename.com,而不是sitename.com或者www.sitename.com——这是跨子域共享的核心。
  • 如果你用的是HTTPS站点,建议再加一行:define('FORCE_SSL_COOKIE', true);,确保Cookie只在HTTPS环境下传输,更安全。
  • 修改后记得清空浏览器的旧Cookie,不然之前的单域Cookie会干扰新设置。

方案二:手动初始化Session时指定Domain

如果是你自己手动用$_SESSION存变量,需要在启动Session前明确设置Cookie参数。可以把这段代码放到网络激活的自定义插件里,或者wp-content/mu-plugins/目录下(mu-plugins里的文件会自动在所有站点加载):

add_action('init', function() {
    // 避免重复启动Session
    if (!session_id()) {
        session_set_cookie_params([
            'lifetime' => 0, // 会话结束后过期,可按需改成具体秒数(比如3600=1小时)
            'path' => '/',
            'domain' => '.sitename.com',
            'secure' => is_ssl(), // 自动适配HTTPS/HTTP环境
            'httponly' => true, // 禁止JS读取Cookie,提升安全性
            'samesite' => 'Lax' // 可选Strict,根据你的跨站需求调整
        ]);
        session_start();
    }
});

这样设置后,不管在哪个子站设置的$_SESSION['my_var'],其他子站都能直接读取。

方案三:自定义Cookie的跨域设置

如果是用自定义Cookie(不是Session自带的),在设置时手动指定Domain参数即可:

设置Cookie:

// 示例:设置一个有效期1小时的全局Cookie
setcookie(
    'global_user_preference',
    'dark_mode',
    time() + 3600, // 有效期
    '/', // 路径
    '.sitename.com', // 跨子域的核心
    is_ssl(), // 安全传输
    true // 仅HTTP可访问,防XSS
);

读取Cookie:

if (isset($_COOKIE['global_user_preference'])) {
    $user_pref = $_COOKIE['global_user_preference'];
    // 后续逻辑
}

如果是用WordPress内置的wp_set_auth_cookie这类函数,也可以通过过滤器修改Cookie Domain:

add_filter('auth_cookie_domain', function($domain) {
    return '.sitename.com';
});

避坑提醒

  • 清除旧Cookie:修改设置后,一定要清空浏览器对应域名的所有Cookie,不然旧的单域Cookie会优先被读取,导致新设置不生效。
  • HTTPS兼容性:如果你的站点有HTTPS,确保secure参数设为true,不然Cookie可能不会在HTTPS页面中发送。
  • SameSite属性:如果你的站点需要跨站请求(比如嵌入到其他域名),可以把SameSite设为None,但同时必须开启secure,否则浏览器会拒绝这个Cookie。

内容的提问来源于stack exchange,提问作者Gufran Hasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:42:16