Laravel:错误“页面由于不活动已过期”(419状态未知)

时间:2019-01-31 11:40:44

标签: php laravel session laravel-5 csrf

我在Laravel 5.6.39上收到错误The page has expired due to inactivity. Please refresh and try again.。在Chrome中,“网络标签”显示错误login - 419 unknown status

刷新页面后,我立即收到错误消息。因此,我再也看不到登录视图,然后被卡住。考虑没有经验的普通用户,仅尝试刷新页面。如果不起作用,他们将离开您的应用。

我可以按照以下步骤重现该错误:

  • 进入登录视图
  • 输入用户名和密码,不要选中“记住我”标志
  • 等待该会话期满(出于测试目的,我将SESSION_LIFETIME设置为1分钟)
  • 点击“登录”按钮,我收到该错误

我已经阅读并尝试了最常见的原因:

  • @csrf出现在登录表单中(这是Laravel的默认身份验证)
  • 文件夹storage具有755,但也尝试了775777
  • 试图启动php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear php artisan config:cache php artisan key:generate
  • 我使用的是默认的SESSION_DRIVER=file,但在生产环境中,我也尝试用SESSION_DRIVER=cookie替换为SESSION_DOMAIN=https://app.my-domain.com/

在这里您会找到我的代码(控制器,视图,路线,.env等)https://gist.github.com/dangelion/aa7fc54ea75f7b2d6062fc79f07e04e8

我真的不知道要解决这个问题。 有帮助吗?谢谢

3 个答案:

答案 0 :(得分:0)

当我们更新应用程序时,浏览器可能仍会使用旧文件。如果您不清除缓存,则旧文件在您申请时可能会遇到问题。

在表单中添加Select X, Y, coalesce(z, <something else>) as z 之后,清除浏览器缓存,现在希望它可以工作

答案 1 :(得分:0)

好吧,我遇到了同样的问题,到目前为止,这是与会话相关的问题。为我工作的是(尝试了许多不同的解决方案之后):

SESSION_DRIVER=cookieSESSION_DOMAIN=null就是

我花了近几个小时试图找出解决方案。

N.B:此问题有多种解决方案,具体取决于您的特定案例/设置。所以我的解决方案是其中之一。

答案 2 :(得分:-1)

您似乎遇到了缓存问题。尝试按照我写的顺序步骤;

  1. 确保@csrf出现在表单标签在表单中后立即出现,如下所示:
<form method="POST" action="/profile">
    @csrf
  1. 运行以下命令:

    • php artisan view:clear
    • php artisan route:clear
    • php artisan cache:clear
    • php artisan config:clear
    • composer dump-autoload
  2. 现在检查应用程序在隐身浏览器窗口中。

如果它有效,欢呼。

现在,您可能会认为它无效,因为您无法要求应用程序的用户在隐身窗口中访问该应用程序。嗯,这里是多么标准的Web应用程序的作品:

  • 我们通常有三台服务器
    1. 开发
    2. 分期
    3. 生产

我们开发并在开发服务器上获得所有这些错误,只有解决了所有这些问题之后,我们才将其推送到登台服务器,然后在此处进行测试。只有在解决所有暂存问题之后,我们才将最终代码推送到生产服务器。

因此,在生产服务器上使用应用程序的用户无需执行任何操作。

如果要在一台服务器上执行所有这些操作,则可以考虑适当地执行此操作以避免出现这种情况。有道理吗?

我希望能帮上忙。