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

Laravel如何实现仅指定子域名间的Session复用不影响其他子域

问题原因

你当前的配置会触发跨集群Session冲突:Cookie的识别规则由作用域域名、Cookie名称、路径三个参数共同决定,当你把SESSION_DOMAIN设为.example.com时,所有*.example.com的子域名都会携带默认名为laravel_session的Cookie。第二台服务器拿到第一台生成的Session ID后,会去自己的数据库查询,找不到对应记录就会导致登录失败。

解决方案

场景1:两台服务器部署独立代码、可单独配置.env

直接给两个集群设置不同的Session Cookie名称即可,同集群内的子域名仍可正常共享Session:

  1. 第一台服务器(对应example.com、first.example.com)的.env配置:
SESSION_DOMAIN=.example.com
SESSION_COOKIE=first_cluster_session
  1. 第二台服务器(对应second.example.com、third.example.com)的.env配置:
SESSION_DOMAIN=.example.com
SESSION_COOKIE=second_cluster_session

配置修改后执行php artisan config:clear清除配置缓存即可生效。

场景2:两台服务器共用同一份代码、无法单独配置.env

直接修改config/session.php,根据当前访问域名动态分配Session配置:

<?php

$currentHost = request()->getHost();
// 分组配置对应的域名
$firstGroup = ['example.com', 'first.example.com'];
$secondGroup = ['second.example.com', 'third.example.com'];

if (in_array($currentHost, $firstGroup)) {
    $customDomain = '.example.com';
    $customCookie = 'first_group_session';
} elseif (in_array($currentHost, $secondGroup)) {
    $customDomain = '.example.com';
    $customCookie = 'second_group_session';
} else {
    // 兜底默认配置
    $customDomain = env('SESSION_DOMAIN', null);
    $customCookie = env('SESSION_COOKIE', 'laravel_session');
}

return [
    // 其他原有配置项保持不变
    'domain' => $customDomain,
    'cookie' => $customCookie,
    // 其他原有配置项保持不变
];

修改后清除配置缓存即可生效,不同分组的域名会自动使用独立的Session Cookie,不会互相干扰。


内容的提问来源于stack exchange,提问作者Hùng Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:24:08