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

Laravel 7子域间会话共享问题咨询

Laravel 7 跨子域名实现单点登录(SSO)

要实现blog1(http://blog.com)登录后,访问blog2(http://blog2.blog.com)自动处于登录状态,需完成以下配置(你的现有配置已满足部分条件,补充剩余配置即可):

1. 核心共享配置确认

  • 必须使用相同的APP_KEY:你已在两个项目的.env中配置了相同的APP_KEY,这是关键——Laravel用它加密Session和Cookie,不一致会导致跨项目无法解析登录状态。
  • 共享Session存储驱动:blog1已使用database作为Session驱动,blog2必须同步配置,且两个项目需连接同一个数据库(或共享Session表)。

2. 统一Session域名配置

两个项目的Session域名都要设置为.blog.com,确保Cookie在所有子域名下生效:

  • Blog1的config/session.php已正确配置:
    'driver' => env('SESSION_DRIVER', 'database'),
    'domain' => env('SESSION_DOMAIN', '.blog.com'),
    
  • 给Blog2补充配置:
    在config/session.php中添加:
    'driver' => env('SESSION_DRIVER', 'database'),
    'domain' => env('SESSION_DOMAIN', '.blog.com'),
    
    同时在Blog2的.env中新增:
    SESSION_DRIVER=database
    SESSION_DOMAIN=.blog.com
    

3. 同步Session表与用户表

  • 如果Blog2还没有Session表,运行以下命令生成并迁移表结构:
    php artisan session:table
    php artisan migrate
    
    确保该表与Blog1的session表处于同一个数据库,结构完全一致。
  • 两个项目需共享用户数据:要么连接同一个用户表,要么保证用户表结构完全相同且用户数据同步——登录状态基于用户ID,用户数据不一致会导致跨项目无法识别登录用户。

4. 优化Cookie跨域传递(可选)

为避免浏览器跨域Cookie限制,可调整Session的SameSite属性:
在两个项目的config/session.php中修改:

'same_site' => 'none',
'secure' => env('SESSION_SECURE_COOKIE', false), // HTTP环境设为false,HTTPS环境设为true

测试验证

  1. 清除浏览器缓存和Cookie,避免旧数据干扰。
  2. 在blog1完成登录,访问blog2即可看到已处于登录状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:20:30