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

标签 php laravel csrf

我安装了 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 Sorry, your session has expired. Please refresh and try again.

5.6版本没有这个问题。

最佳答案

在阅读以下内容之前,请确保您的表单中有 @csrf{{ csrf_field() }} 喜欢

<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>

Laravel 中出现 Session Expired 或 419 Page Expired 错误消息是因为您的 csrf token 验证失败,这意味着 App\Http\Middleware\VerifyCsrfToken::class 中间件已经打开。在表单中已经添加了 @csrf Blade 指令,这也应该没问题。

然后要检查的另一个区域是 session 。 csrf token 验证直接与您的 session 相关,因此您可能需要检查您的 session 驱动程序是否正常工作,例如配置不正确的 Redis 可能会导致问题。

也许您可以尝试从 .env 文件切换 session 驱动程序/软件,支持的驱动程序如下所示

Laravel 5、Laravel 6 和 Laravel 7 支持的 Session 驱动程序 (Doc Link)

  • file - session 存储在 storage/framework/sessions 中。
  • cookie - session 存储在安全、加密的 cookie 中。
  • database - session 存储在关系数据库中。
  • memcached/redis - session 存储在这些基于缓存的快速存储之一中。
  • array - session 存储在 PHP 数组中,不会被持久化。

如果您的表单在切换 session 驱动程序后工作正常,那么该特定驱动程序有问题,请尝试从那里修复错误。

可能容易出错的情况

  • 可能由于 /storage 目录的权限问题,基于文件的 session 可能无法工作(快速谷歌搜索将获取解决方案),还记得将 777 作为目录永远没有解决方案。

  • 在数据库驱动的情况下,你的数据库连接可能是错误的,或者 sessions 表可能不存在或配置错误(错误的配置部分被确认为问题为根据@Junaid Qadir 的评论)。

  • redis/memcached 配置错误或同时被系统中的其他一些代码操作。

执行 php artisan key:generate 并生成一个新的应用程序 key 可能是个好主意,这反过来会刷新 session 数据。

清除浏览器缓存HARD,我发现 Chrome 和 Firefox 是罪魁祸首。

Read more about why application keys are important

关于php - 在 Laravel 中发布请求 - 错误 - 419 抱歉,您的 session /419 您的页面已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52583886/

相关文章:

php - 将我的加密库从 Mcrypt 升级到 OpenSSL

php - 如何在 SQL 中使用 bool 值

php - 从存储为变量的表名称中删除?

php - 如何通过另一个网络上的浏览器打开laravel应用程序(使用公共(public)IP)

javascript - 如何阻止Chrome开发者工具的ajax调用?

php - 使用 soap api 显示所有 otrs 票

laravel - Ioredis 与 Laradock redis 容器连接超时

php - Laravel Blade : passing a variable to a child view

django - Paypal 回电给我 403 错误 : csrf token missing or incorrect on django app

android - 使用内置 CSRF 保护的 node.js 服务器,移动应用程序如何接收 CSRF token ?