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

Laravel 8部署子域名时会话异常,需各子域独立维护会话求助

解决方案:Laravel 8子域名独立会话配置

要让testapp.example.com和app.example.com各自维护独立会话,核心是取消通配符域名的会话共享,为每个子域单独配置会话域名,具体步骤如下:

1. 为每个环境配置专属的SESSION_DOMAIN

Laravel支持通过环境变量区分不同部署环境,直接在各自环境的.env文件中设置会话域名:

  • 对于testapp.example.com,在其.env文件中添加:
    SESSION_DOMAIN=testapp.example.com
    
  • 对于app.example.com,在其.env文件中添加:
    SESSION_DOMAIN=app.example.com
    

同时确保config/session.php中的domain配置项是从环境变量读取的(默认配置即为如此,可检查确认):

'domain' => env('SESSION_DOMAIN', null),

2. 清除浏览器旧Cookie

之前设置的.example.com通配符Cookie会残存在用户浏览器中,可能导致新会话配置不生效。需要让访问者清除对应域名的Cookie,或者在应用中添加逻辑主动清除旧Cookie(可选操作)。

3. 确保会话存储的独立性(可选)

如果两个环境使用了相同的会话驱动(比如Redis、数据库),为避免会话数据冲突,可给每个环境设置独立的会话前缀:

  • 在testapp.example.com的.env中添加:
    SESSION_PREFIX=laravel_session_testapp
    
  • 在app.example.com的.env中添加:
    SESSION_PREFIX=laravel_session_app
    

然后在config/session.php中确保前缀读取环境变量:

'prefix' => env('SESSION_PREFIX', 'laravel_session'),

如果使用文件驱动,要保证两个环境的会话存储目录完全分离,比如分别设置:

// testapp环境的session.php配置
'path' => storage_path('framework/sessions/testapp'),

// app环境的session.php配置
'path' => storage_path('framework/sessions/app'),

完成以上配置后,两个子域名的会话就会完全独立,不会互相干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:33:28