【问题标题】:The page has expired due to inactivity. Why?由于不活动,该页面已过期。为什么?
【发布时间】:2018-08-05 23:12:39
【问题描述】:

我有问题。我有两台电脑,第一台是 Ubuntu,第二台是 Windows 10。两台电脑都有 Vagrant + VirtualBox + Homestead 的捆绑包。在装有 Ubuntu 的计算机上,一切正常,而在装有 Windows 10 的计算机上,当我尝试向服务器发送表单时,我得到状态 419 和消息​​:

页面由于不活动而过期。请刷新并重试。

每次刷新页面时都会更新 CSRF 令牌。这是 Laravel + php artisan make:authphp artisan migrate(默认表)在两台 PC 上干净的 Homestead 环境中的干净安装。 session目录的权限是满的,用户是vagrant,组是vagrant。会话文件已创建。.env 文件相同(标准),但数据库名称除外。可能是什么问题呢?我真的需要你的帮助!

所有关于类似问题的建议都没有帮助我。我清理了缓存视图、配置等,重新生成了密钥。浏览器缓存被清理,cookies 检查 - 当场。两台电脑的唯一区别是操作系统,但是 Laravel 在 Homestead 虚拟机上是否重要?

【问题讨论】:

  • 您是否超过 2 小时不活动?
  • 不,这个项目的全新安装和不活动不是(如果我正确理解你的问题,我的英语不好,我使用翻译)
  • 我录了一个video

标签: laravel windows-10 homestead


【解决方案1】:

从您的视频中,将 .env 文件中的 APP_NAME 更改为“Laravel”以外的其他内容。

我敢打赌,您在同一个本地 URL 下运行的其他网站具有相同的 APP_NAME。

更改 APP_NAME 会更改 config/sessions.php

中的会话 cookie 名称
'cookie' => env(
    'SESSION_COOKIE',
    str_slug(env('APP_NAME', 'laravel'), '_').'_session'
),

您可以通过在 .env 文件中设置 SESSION_COOKIE 变量来手动覆盖 cookie 名称,或者让它回退到使用应用名称(第二个参数)的上述计算 slug。

由于某种原因,Google Chrome 是唯一发生这种情况的浏览器。我花了将近一年的时间试图解决这个问题,这就是解决方案!

【讨论】:

  • 我在重新安装VirtualBox之前按照你说的做了,我的应用程序工作了!重新安装VirtualBox后,我更改了APP_NAME,表单开始发送成功,令牌停止更改,之后我将APP_NAME返回给Laravel,应用程序继续正常运行!根据简单的日志,我可以判断是什么帮助重新安装了 VirtualBox,怎么说?
  • 我在前一个应用程序附近部署了另一个应用程序。两个应用程序的 APP_ENV - Laravel。一切都很完美。简单的重装软件就解决了问题很可怕,对问题没有真正的了解...
【解决方案2】:
  • app/Http/Middleware/VerifyCsrfToken.php中添加路由条目

受保护的 $except = [ '你的/路线' ];

如果您已经在表单中包含 CSRF 令牌。然后你得到错误页面可能是因为你的表单中的缓存数据。打开终端/命令提示符并在项目根目录中运行这些命令。

  1. php artisan 缓存:清除
  2. php 工匠配置:清除
  3. php工匠路线:清除
  4. php 工匠视图:清除

在运行这些命令的同时尝试清除浏览器缓存

  • 确保文件app/config/session.php中的会话安全值设置为null。

    'secure' => env('SESSION_SECURE_COOKIE', false),

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 2018-05-17
    • 1970-01-01
    • 2018-12-10
    • 2018-03-01
    • 2018-08-31
    • 1970-01-01
    • 2018-09-16
    • 2019-07-11
    相关资源
    最近更新 更多