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

Laravel代码正常却突然出现CSRF token mismatch错误,清缓存也无法解决

CSRF token mismatch 报错排查及解决方案

高频触发原因(突然报错优先排查)

  • JS代码位置变更:如果你近期把这段AJAX代码从Blade模板文件抽离到了独立的.js静态文件,Blade的{{ csrf_token() }}模板语法不会被静态文件解析,会直接作为字符串输出,而非实际的token值,导致参数校验失败。
  • 域名/访问协议变更:之前用HTTP访问项目,近期切换到HTTPS,或者前后端端口/域名有调整,导致Session Cookie跨域/跨协议无法携带,token匹配失败。
  • Session配置修改:近期调整过config/session.php里的domain、secure、same_site参数,或者切换过Session存储驱动(比如从file改到redis)没有配置正确,导致Session无法正常读写,每次请求生成新的token。

分步排查操作

  1. 校验token实际值:打开浏览器控制台,找到对应AJAX请求的Payload,查看_token参数的实际值,再查看页面源代码里{{ csrf_token() }}渲染出来的内容是否一致,同时对比Cookie里的XSRF-TOKEN值,三者不一致就是token参数错误。
  2. 验证Session有效性:清理浏览器Cookie后重新刷新页面,再次提交请求看是否还报错,换非隐身模式/其他浏览器访问测试,排除本地Cookie禁用/过期问题。
  3. 检查配置改动:回退近期修改的Session、中间件、跨域相关配置,看问题是否消失。

对应解决方法

  • 静态JS文件获取token方案:在Blade模板的<head>标签内添加meta标签存储token:
<meta name="csrf-token" content="{{ csrf_token() }}">

全局配置AJAX默认携带CSRF header,不用每个请求单独传_token参数:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
  • 跨域/HTTPS适配:如果是跨域请求,在AJAX配置中添加withCredentials: true,同时后端config/cors.php里将supports_credentials设置为true;HTTPS场景下将config/session.php的secure参数修改为env('SESSION_SECURE', false),本地开发HTTP环境下自动关闭,线上HTTPS配置对应环境变量即可。
  • Session修复:如果是Session存储权限问题,给项目storage目录设置正确权限:chmod -R 755 storage,存储驱动切换后确认驱动配置、连接正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:09:03