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

Laravel项目迁移新域名后出现CSRF token mismatch错误如何解决?

问题产生原因

Laravel的CSRF Token校验和会话(Session)强绑定,换域名部署后出现校验失败,通常是以下几个原因导致:

  • 旧配置缓存未清理:部署到新环境后没有清空Laravel的配置、路由、视图缓存,旧域名相关的配置仍然生效
  • 会话域名配置错误:.env文件中SESSION_DOMAIN参数还是旧域名,导致新域名下无法正常读写会话Cookie,每次请求都会生成新的会话,前后Token无法匹配
  • 安全配置不匹配:如果旧域名配置了HTTPS而新域名暂时使用HTTP,.env中SESSION_SECURE_COOKIE参数设为true的话,浏览器会拒绝在HTTP协议下发送会话Cookie,会话无法关联导致校验失败
  • 目录权限不足:新服务器上storage/framework/sessions目录没有写权限,会话无法持久化存储,每次请求都是新的会话,Token自然不匹配
  • 页面缓存问题:新域名如果配置了CDN或者站点静态缓存,缓存了带旧Token的页面,用户拿到的Token不属于当前会话,校验失败
修复方案

按照以下步骤排查修复即可:

  1. 清理所有缓存
    在项目根目录执行以下命令:
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear
  1. 修正环境配置
    编辑项目根目录的.env文件,调整以下参数:
  • 将APP_URL修改为新域名,示例:APP_URL=https://你的新域名.com
  • 调整SESSION_DOMAIN,要么直接删除该配置项(Laravel会自动适配当前访问的域名),要么修改为新域名,顶级域名前加.适配所有子域名,示例:SESSION_DOMAIN=.你的新域名.com
  • 如果你新域名还没配置HTTPS,将SESSION_SECURE_COOKIE修改为false,已配置HTTPS保持true即可
  1. 修正目录权限
    给storage和缓存目录配置正确的读写权限,Linux环境下执行:
chmod -R 755 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

注意将www-data替换为你服务器Web服务实际运行的用户(比如nginx、apache等)
4. 排查缓存配置
如果新域名配置了CDN或者页面静态缓存,排除带有动态CSRF Token的页面,不要做静态缓存,避免用户拿到过期的Token

可选优化

你当前的代码是每个POST请求单独传_token,可以调整为全局配置,减少重复代码:

  1. 在Blade模板的<head>标签中加入meta标识:
<meta name="csrf-token" content="{{ csrf_token() }}">
  1. 全局配置AJAX请求头,所有jQuery请求都会自动携带Token:
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:36:04