Laravel跨子域名路由会话数据丢失问题求助
解决Laravel多子域名会话共享问题
这个问题我之前帮不少开发者处理过,核心原因是Laravel默认的Cookie配置只绑定当前域名,跨子域名时会话Cookie无法被识别,所以跳转后会出现需要重新登录的情况。下面是具体的解决方案:
1. 配置Cookie的Domain参数
找到项目根目录下的config/session.php文件,修改其中的domain配置项:
'domain' => '.project.com',
注意前面的点号非常关键——它表示这个Cookie对project.com下的所有子域名都生效,不管是app.project.com还是user.project.com,都能识别到同一份会话Cookie。
2. 确保Session驱动一致
两个子域名指向的应用必须使用相同的会话驱动,比如同时用file、database或者redis。在config/session.php里检查driver配置:
'driver' => env('SESSION_DRIVER', 'file'),
- 如果用
file驱动:要保证两个子域名的应用读写的是同一个会话文件目录; - 如果用
database或redis驱动:只要数据库/Redis的连接信息一致,就能自动共享会话数据。
3. 清除旧Cookie并测试
修改配置后,先清除浏览器中原来的Cookie(旧Cookie是绑定单一子域名的),然后重新登录app.project.com,再跳转至user.project.com,此时应该能保持登录状态了。
额外注意事项
- 若你的Laravel版本较老(比如5.x及之前),可能还需要在
config/cookie.php里也将domain设置为.project.com,新版本Laravel的会话配置会同步到Cookie设置,但保险起见可以检查一下; - 确保两个子域名指向的是同一个代码库,或者至少会话相关的配置完全一致,否则即使Domain配置正确,会话存储位置不同也无法共享数据。
内容的提问来源于stack exchange,提问作者JenuRudan
相关产品推荐
相关产品推荐

