【问题标题】:Laravel: error "The page has expired due to inactivity" (419 unknown status)Laravel:错误“页面由于不活动而过期”(419未知状态)
【发布时间】:2019-04-17 14:08:12
【问题描述】:

我在 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 的默认身份验证)
  • 文件夹storage755 但也尝试使用775777
  • 试图启动php artisan cache:clearphp artisan config:clearphp artisan route:clearphp artisan view:clearphp artisan config:cachephp artisan key:generate
  • 我使用默认的SESSION_DRIVER=file,但在生产中我也尝试用SESSION_DRIVER=cookie替换它和SESSION_DOMAIN=https://app.my-domain.com/

在这里您可以找到我的代码(控制器、视图、路由、.env、...)https://gist.github.com/dangelion/aa7fc54ea75f7b2d6062fc79f07e04e8

我真的没有更多的想法来解决这个问题。 一些帮助?谢谢

【问题讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • 在@Fred K 上做过一个很好的解决方案吗?

标签: php laravel session laravel-5 csrf


【解决方案1】:

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

在表单中添加@csrf 后清除浏览器缓存,现在希望这可能工作

【讨论】:

  • 我们已经有了@csrf,但是每次我刷新页面时,错误仍然存​​在,所以我被卡住了
  • @FredK 清除浏览器缓存并重新加载页面并检查
  • 这不是解决方案。想想没有经验的普通用户,只尝试刷新页面。如果它不起作用,他们会离开您的应用程序。这种情况如何解决?
  • @FredK 首先告诉我,你试过清除浏览器缓存吗?清除缓存后仍然出现错误?
【解决方案2】:

嗯,我也遇到过同样的问题,据我所知,这是一个与会话相关的问题。对我有用的是(在尝试了这么多不同的解决方案之后):

SESSION_DRIVER=cookieSESSION_DOMAIN=null 仅此而已

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

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

【讨论】:

    【解决方案3】:

    您的缓存似乎存在问题。尝试按照我编写它们的顺序执行以下步骤;

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

      • php 工匠视图:清除
      • php 工匠路线:清除
      • php artisan 缓存:清除
      • php 工匠配置:清除
      • 作曲家转储自动加载
    2. 现在在隐身浏览器窗口中检查应用程序。

    如果它有效,请欢呼。

    现在您可能认为它无效,因为您不能要求您应用的用户在隐身窗口中访问该应用。好吧,这是标准 Web 应用程序流程的工作原理:

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

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

    因此用户在生产服务器上使用应用程序不需要做任何事情。

    如果您在一台服务器上执行所有这些操作,您可能会考虑正确执行此操作以避免此类情况。有道理吗?

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 2019-07-11
      • 2018-10-01
      • 2018-07-22
      • 1970-01-01
      • 2018-08-24
      • 2019-07-16
      • 2018-05-26
      • 1970-01-01
      相关资源
      最近更新 更多