在 Laravel 中进行 POST 请求 - 错误 - 419 对不起,您的会话/ 419 您的页面已过期。

11 浏览
0 Comments

在 Laravel 中进行 POST 请求 - 错误 - 419 对不起,您的会话/ 419 您的页面已过期。

我安装了 Laravel 5.7

在文件 \\resources\\views\\welcome.blade.php 中添加了一个表单

@csrf

 

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

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

发送 POST 请求后:

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

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

admin 更改状态以发布 2023年5月23日
0
0 Comments

这是因为表单要求一个csrf令牌。在5.7版本中,他们将其改为@csrf。

@csrf ...

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

0
0 Comments

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


@csrf 
... rest of form ...

在Laravel中,会出现会话已过期或419页已过期的错误消息,因为您的csrf令牌验证失败,这意味着App\Http\Middleware\VerifyCsrfToken::class中间件已经启用。在表单中已添加@csrf blade指令,这应该也没问题。

然后,您需要检查的另一个区域是会话。csrf令牌验证直接涉及您的会话,所以您可能要检查您的会话是否工作,比如错误配置的Redis会导致问题。

也许您可以尝试从您的.env文件中切换您的会话驱动程序/软件,支持的驱动程序如下:

Laravel 5、Laravel 6和Laravel 7支持的会话驱动程序(文档链接)

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

如果在切换会话驱动程序后您的表单可以工作,则某个特定驱动程序存在问题,请尝试从那里修复错误。

可能出现错误的情况

  • 可能由于/storage目录的权限问题,基于文件的会话可能无法工作(快速搜索可获得解决方案),还请记住,将目录设置为777并不是解决方案。

  • 在数据库驱动程序的情况下,您的数据库连接可能有问题,或者sessions表可能不存在或错误配置(据@Junaid Qadir的评论证实,错误配置部分是一个问题)。

  • redis/memcached配置有误或正在同一时间受到系统中某个其他代码的操作。

执行php artisan key:generate并生成新的应用程序密钥可能是一个好主意,这将清除会话数据。

清除浏览器缓存+强制刷新,我发现Chrome和Firefox经常是罪魁祸首。

阅读更多关于为什么应用程序密钥很重要的信息

0