在阅读以下内容之前,请确保您具有@csrf
或{{ csrf_field() }}
格式
如
<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
larvel中出现Session Expired或419 Page Expired错误消息是因为您的csrf令牌验证失败的某处,这意味着App\Http\Middleware\VerifyCsrfToken::class
中间件已打开。@csrf
已经以Blade指令的形式添加了它,也应该很好。
然后要检查的另一个区域是会话。该csrf
令牌验证直接涉及您的会话,所以你可能要检查你的会话驱动程序是否工作正常与否,如不正确配置的Redis可能会导致问题。
也许您可以尝试从.env
文件中切换会话驱动程序/软件,下面提供了受支持的驱动程序
Laravel 5,Laravel 6和Laravel 7中受支持的会话驱动程序 (Doc Link)
file
-会话存储在存储/框架/会话中。
cookie
-会话存储在安全的加密cookie中。
database
-会话存储在关系数据库中。
memcached
/ redis
-会话存储在这些快速,基于缓存的商店之一。
array
-会话存储在PHP数组中,并且不会保留。
如果在切换会话驱动程序后您的表单可以工作,则说明该特定驱动程序有问题,请尝试从那里修复错误。
可能的容易出错的情况
由于/storage
目录的权限问题,可能基于文件的会话可能无法正常工作(快速搜索将为您带来解决方案),还要记住,将777用作目录绝对不是解决方案。
对于数据库驱动程序,您的数据库连接可能错误,或者sessions
表可能不存在或配置错误(根据@Junaid Qadir的评论,错误的配置部分已确认是问题)。
redis/memcached
配置错误或同时被系统中的其他一些代码操纵。
执行php artisan key:generate
并生成一个新的应用程序密钥可能是一个好主意,该应用程序密钥又将刷新会话数据。
清除浏览器缓存HARD,我发现chrome和firefox是我不记得的罪魁祸首。
阅读有关为何应用程序键如此重要的更多信息
return;
您可以打电话return redirect()->back();
。据我所知,该应用程序在发布请求后无事可做。也许您可以在处理请求后将其重定向到视图。