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

Laravel多子域名会话冲突问题:同一应用跨子域无法正常运行

解决Laravel跨子域会话冲突问题

嘿,这个问题我之前处理过不少——多子域共享同一个Laravel应用时,会话Cookie的域限制是最常见的坑。咱们直接说解决方案,一步步来:

1. 修改会话Cookie的Domain配置

你现在的config/session.php里domain设置的是subd1.example.com,这就导致会话Cookie只能在这个子域下被识别,subd2自然读不到。要让两个子域都能共享会话,得把Domain改成根域的通配形式:

打开config/session.php,把domain项改成:

'domain' => env("SESSION_DOMAIN", ".example.com")

注意前面的.不能少,它表示这个Cookie对example.com下的所有子域都生效。

2. 更新环境变量(.env文件)

为了确保配置在生产环境生效,记得在你的.env文件里添加或修改这一行:

SESSION_DOMAIN=.example.com

这样不管是subd1还是subd2,都会使用这个统一的域配置。

3. 清理旧会话Cookie

因为用户之前访问subd1时,浏览器已经存储了绑定subd1.example.com的旧Cookie,这些旧Cookie会和新配置的Cookie冲突。你可以:

  • 自己测试时手动清除浏览器对应域名的Cookie
  • 给用户提示,让他们清理浏览器缓存(或者在应用里做一次Cookie过期处理)

4. 验证会话共享

部署修改后,你可以做个简单测试:

  • 在subd1.example.com登录账号
  • 直接访问subd2.example.com,看看是否保持登录状态
  • 检查浏览器的Cookie管理面板,确认会话Cookie的Domain是.example.com

另外补充两点:

  • 你的cookie名称subd1examplecom可以保留,不用修改,只要两个子域用同一个名称就行
  • 如果你的会话驱动用的是file,确保存储目录(storage/framework/sessions)的权限没问题,两个子域的请求都能读写这些文件

这样调整后,两个子域就能正常共享会话了,不会再出现冲突问题。

内容的提问来源于stack exchange,提问作者Manuel Postigo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:45:13