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

同一服务器部署两个Laravel项目出现CSRF token mismatch问题求助

解决方案:Laravel子域名登录CSRF Token Mismatch问题

针对你遇到的子域名dev.my-domain.com登录时的CSRF token mismatch错误,结合主域名正常、修改session路径无效的情况,可按以下步骤排查解决:

1. 配置Session Cookie的共享域名

Laravel的Session和CSRF Token依赖Cookie识别会话,主域名与子域名需配置统一的Cookie域名才能正确处理会话上下文:

  • 打开子项目的config/session.php,修改domain配置项为带前缀点的根域名:
    'domain' => '.my-domain.com',
    
    (前缀点表示允许所有子域名适配该Cookie的会话规则)
  • 执行配置缓存清除命令,确保修改生效:
    php artisan config:clear
    php artisan route:clear
    

2. 确保两个项目的Session存储完全独立

如果两个项目使用相同的Session驱动,需避免会话数据冲突:

  • 若用file驱动:确认子项目的storage/framework/sessions目录是独立的,且拥有服务器写入权限,不要与主项目共用该目录。
  • 若用database驱动:在子项目的config/session.php中修改table配置为不同的表名(如sessions_dev),或使用独立的数据库连接。

3. 检查VerifyCsrfToken中间件配置

确保子域名的请求被CSRF验证允许:

  • 打开子项目的app/Http/Middleware/VerifyCsrfToken.php,若存在跨域请求场景,可在$allowedOrigins中添加子域名(Laravel 9+支持):
    protected $allowedOrigins = [
        'https://dev.my-domain.com',
    ];
    

4. 彻底清除浏览器Cookie与服务器缓存

  • 手动在浏览器中删除所有与.my-domain.com相关的Cookie(包括主域名和子域名的),避免旧Cookie干扰会话识别。
  • 重启服务器的Web服务(如Nginx/Apache),确保服务器层面的缓存被清除。

5. 排查服务器层面的Cookie配置

检查Nginx/Apache的站点配置,确认没有强制设置Cookie的Domain或Path属性,避免覆盖Laravel的配置。例如Nginx中若存在类似以下配置,需移除或调整:

add_header Set-Cookie "path=/; domain=my-domain.com; HttpOnly; Secure";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:07:22