【问题标题】:Laravel 419 | Session ExpiredLaravel 419 |会话已过期
【发布时间】:2021-09-07 06:00:00
【问题描述】:

我在登录时遇到了 Laravel 会话问题。

1.是的,我的表单中确实包含一个 CSRF 令牌。

2.是的,令牌没有过期。

3.是的,SESSION_SECURE_COOKIE 设置为 false。

我使用redis 作为我的SESSION_DRIVER 并且expiration time 设置为120 minutes

最让我困扰的是“有时有效,有时无效”。

如果我打开一个隐身标签并尝试登录,10/20 次它会正常工作而没有任何问题,但其他 10 次会导致

[419 |会话过期]错误

.

我的环境是CentOSNginx

没有任何代理,我也没有使用 Cloudflare。

我真的很吃惊,因为这种行为并不一致,它实际上是随机行为,会导致登录成功或不成功。

有人知道可能是什么情况吗?

【问题讨论】:

  • 清理缓存可能会有所帮助:php artisan optimize:clear 然后php artisan config:clear。此外,问题可能是未定义的索引或变量。如果 Laravel 没有捕获到任何错误/通知/警告,在 Auth::check() 之前在中间件中添加 error_reporting(0) 可以帮助您
  • 尝试清除缓存,php、nginx和laravel的日志文件夹也没有错误。
  • 先检查this是否帮助您找到错误。另外,这种行为是否只发生在一页中?如果刷新页面它仍然返回 419?
  • 它实际上发生在/login/register 路由上,当我刷新并尝试再次提交表单时,出现 419 的可能性仍然是 50/50。正如我之前提到的,它甚至可能在一个进入之前连续失败 10 次。我会给error_reporting() 一个机会。

标签: php laravel nginx session


【解决方案1】:

要解决此错误,您首先需要将以下命令之一插入到表单标签中。

@csrf OR {{ csrf_field }}

如果您的问题没有解决,请执行以下操作:(注意以上命令之一必须在表单标签中)

1.将以下命令之一插入表单标签@csrf OR {{ csrf_field }}

2.打开.env文件,将SESSION_DRIVER部分的值改为“文件”。

3.那么你应该重置 laravel 缓存。在终端输入以下命令

php artisan view:clearphp artisan route:clearphp artisan cache:clear

php artisan config:cachephp artisan optimize

4.在最后一步中,从服务中拔下项目并再次单击 php artisan serve

希望您的问题得到解决

【讨论】:

  • 1.如果我缺少 @csrf 令牌 2,则该表单将永远不会提交。这绝对与 SESSION_DRIVER 3 无关。我已经提到我完全重置了 view/route/cache/config 4。我在 @ 987654332@ 如前所述,在实时服务器上,无需使用php artisan serve
猜你喜欢
  • 2020-05-22
  • 2022-06-11
  • 2019-05-05
  • 2019-03-06
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
相关资源
最近更新 更多