Laravel 5.5,表单中包含有 token 的情况下依然抛出 TokenMismatchException 错误?

交代服务器环境
Centos 7.4 1708 64位
php v7.1.11
session保存在redis中

本地测试windows环境下没问题,线上就一直是这个样子

问题复现在这里
表单提交时报错TokenMismatchException
表单中放置了{{ csrf_field() }}
web页面中也有<input type="hidden" name="_token" value="U30e1OBTyGCQMobl4D0rKrqqIbdc23Im3cs3zRcN">
看下图,post中也有_token数据

所以这个错误产生的原因是什么呢?该怎么解决?

这个问题我也看过了,没有解决

图片描述

一冉再
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9
一冉再
6年前 评论

@断了再续上 CSRF_TOKEN 生成之后是存储在 Session 里的,确定下你的 Session 是否能正常使用?

6年前 评论

如果实在找不到问题出在哪里的话,打开 Illuminate\Foundation\Http\Middleware\VerifyCsrfToken 这个 Class,handle 方法就是验证处理 CSRF_TOKEN 的,一个一个慢慢调试吧。

6年前 评论
一冉再

@Seaony 好的,大概有点方向了。能麻烦您给我大概讲一下csrf的流程吗

6年前 评论

这个你直接翻源码看就行了 :sweat_smile:

6年前 评论
一冉再

:neutral_face::neutral_face::neutral_face:@Seaony 先谢过,我先研究了,目前发现redis中并没有存进去_token

6年前 评论
一冉再

@Seaony 现在token前后一致了,但是抛出了错误

The page has expired due to inactivity. 
Please refresh and try again.

尝试了清除浏览器缓存
并尝试了如下操作

composer dump-autoload
php artisan optimize
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

均为这个错误

6年前 评论
一冉再

见鬼了,上传到线上正常的,线上测试是这毛病

6年前 评论
一冉再

解决了,本地host映射和线上域名不同,设置了 SESSION_DOMAIN ,所以GG。
csrf验证问题终于解决,基本别人遇到过的坑全让我踩了一遍。

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!