在Laravel中发布请求 - 错误 - 419 抱歉,您的会话/ 419您的页面已过期

2022-08-30 06:56:05

我安装了 Laravel 5.7

已将表单添加到文件中\resources\views\welcome.blade.php

<form method="POST" action="/foo" >
    @csrf
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>
</form>

已添加到文件\routes\web.php

Route::post('/foo', function () {
    echo 1;
    return;
});

发送 POST 请求后:

419 抱歉,您的会话已过期。请刷新并重试。

在版本中没有这样的问题。5.6


答案 1

在阅读以下内容之前,请确保您的表单中有@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是罪魁祸首,比我记得的要多。

详细了解为什么应用程序密钥很重要


答案 2

这是因为表单需要 csrf。在5.7版本中,他们将其更改为@csrf

<form action="" method="post">
    @csrf
    ...

参考文献: https://laravel.com/docs/5.7/csrf


推荐