在阅读以下内容之前,请确保您的表单中有@csrf
或{{ csrf_field() }}
,例如
<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>
Laravel中的会话已过期或419页已过期错误消息出现,因为您的csrf令牌验证失败,这意味着中间件已经打开。在形式中,已经添加了刀片指令,这应该也很好。App\Http\Middleware\VerifyCsrfToken::class
@csrf
然后,要检查的另一个区域是会话。令牌验证直接与您的会话有关,因此您可能需要检查会话驱动程序是否正常工作,例如,配置不正确的 Redis 可能会导致问题。csrf
也许您可以尝试从文件中切换会话驱动程序/软件,下面给出了支持的驱动程序.env
Laravel 5、Laravel 6 和 Laravel 7 中支持的会话驱动程序(Doc Link)
-
file
- 会话存储在存储/框架/会话中。
-
cookie
- 会话存储在安全的加密 Cookie 中。
-
database
- 会话存储在关系数据库中。
-
memcached
/ redis
- 会话存储在这些基于缓存的快速存储之一中。
-
array
- 会话存储在PHP数组中,不会持久化。
如果您的表单在切换会话驱动程序后工作正常,则该特定驱动程序出现问题,请尝试从那里修复错误。
可能容易出错的方案
-
可能基于文件的会话可能由于目录的权限问题而无法正常工作(快速谷歌搜索将为您获取解决方案),还要记住为目录放置777永远不会是解决方案。/storage
-
对于数据库驱动程序,您的数据库连接可能是错误的,或者表可能不存在或配置错误(根据@Junaid Qadir的评论,错误的配置部分已确认为问题)。sessions
-
redis/memcached
配置错误或同时被系统中的其他代码片段操作。
执行并生成新的应用程序密钥可能是一个好主意,该密钥将反过来刷新会话数据。php artisan key:generate
清除浏览器缓存很难,我发现Chrome和Firefox是罪魁祸首,比我记得的要多。
详细了解为什么应用程序密钥很重要