如何让同一域名不同子域的Laravel应用共享用户认证系统?
跨主域与子域实现Laravel免重复登录方案
你的猜测完全可行,不需要手动编写登录逻辑,通过统一配置就能实现session cookie跨主域/子域共享,具体步骤如下:
核心配置项调整
共享Application Key
两个Laravel项目的.env文件中,APP_KEY必须完全相同。Laravel用这个Key加密session数据,不一致的话子域无法解析主域的session内容。如果是新生成的Key,要同步更新两个项目,避免已登录用户会话失效。配置Cookie作用域
修改两个项目config/session.php中的以下配置:'domain' => '.mydomain.com':前面的点必须保留,这样Cookie会作用于主域及所有子域'secure' => env('SESSION_SECURE', true):HTTPS环境设为true,本地HTTP测试可设为false'same_site' => 'lax':避免设为'strict',否则子域请求无法携带Cookie
统一Session存储与驱动
因为两个项目共享数据库且在同一服务器:- 把
.env中的SESSION_DRIVER统一设为database(或redis,如果有部署) - 确保两个项目使用同一个数据库的
session表(Laravel默认表结构一致,直接共享即可)
- 把
额外优化建议
- 把用户模型、认证相关逻辑抽成共享代码(比如Composer包或共享目录),避免两个项目的认证逻辑出现差异,导致会话验证失败
- 确认服务器的CORS配置已经允许主域与子域之间的Cookie传递,你已经提到这一点,确保配置正确即可
特殊场景说明
只有当两个项目的认证逻辑存在根本性差异(比如用户表结构完全不同),或者无法共享session存储时,才需要手动编写会话同步逻辑。你的场景完全符合配置共享的条件,无需额外编码。
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

