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

如何实现https://example.com与https://www.example.com共享同一会话?

主域名与带www子域名共用会话的替代方案

除了将www.example.com重定向至example.com,还有以下几种可行方法实现两个域名共用会话:

1. 配置跨域Cookie属性

会话通常依赖Cookie传递会话ID,只需调整Cookie的Domain和SameSite属性,让两个域名都能读取同一个会话Cookie:

  • 设置Domain为.example.com(注意前缀的点):这会让example.com和所有子域名(包括www.example.com)都能访问该Cookie。
  • 配合Secure属性(强制HTTPS传输)和HttpOnly属性(防止XSS窃取Cookie)提升安全性。
  • SameSite设为Lax(默认推荐,兼顾安全与可用性),若需要更宽松的跨域场景可设为None(但必须搭配Secure)。

示例后端设置Cookie代码(PHP):

setcookie(
    'session_id',
    $session_token,
    [
        'expires' => time() + 3600,
        'path' => '/',
        'domain' => '.example.com',
        'secure' => true,
        'httponly' => true,
        'samesite' => 'Lax'
    ]
);

2. 使用分布式共享会话存储

将会话数据从服务器本地存储(如文件、本地数据库)迁移至分布式存储服务(如Redis、Memcached):

  • 两个域名对应的应用服务器都连接同一个共享存储实例。
  • 当用户访问任一域名时,应用通过会话ID(从Cookie获取)到共享存储中读取会话数据,实现会话同步。
  • 这种方法无需修改Cookie属性,但需确保两个应用的会话ID生成/解析逻辑一致,且都有权限访问共享存储。

3. 采用JWT统一认证

使用JSON Web Token(JWT)作为会话凭证:

  • 将JWT存储在Cookie中,并设置Domain为.example.com,让两个域名都能读取;也可存储在前端localStorage/sessionStorage中(需注意XSS风险)。
  • 用户访问另一个域名时,前端将JWT放入请求头(如Authorization: Bearer <token>),后端验证JWT的有效性即可获取用户会话信息。
  • 这种方法无需依赖服务器端会话存储,适合微服务架构,但需妥善处理JWT的过期与刷新逻辑。

注意事项

  • 必须确保两个域名都使用HTTPS,否则浏览器可能拒绝设置Secure属性的Cookie。
  • 调整Cookie属性前,需清理用户浏览器中已存在的旧Cookie,避免冲突。
  • 若使用JWT存储在前端,需额外做XSS防护(如设置CSP、过滤用户输入)。

内容的提问来源于stack exchange,提问作者Satish Sawant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:02:39