“由于不活动,页面已过期”-Laravel 5.5

我的注册页面正在正确显示表单,表单中有 CsrfToken ({{ csrf_field() }}))。

表格 HTML

<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>

我正在为用户使用内置身份验证。除了路由和重定向之外,没有改变任何东西。

当我提交表单时(也是在重新加载之后) ,它会显示 The page has expired due to inactivity. Please refresh and try again.错误。

我遗漏了一个很小的东西。但不确定是什么。有什么帮助吗?

更新

发现问题。会话驱动程序被设置为数组。将其更改为文件,现在错误消失了。 但是如果我使用数组有什么问题吗?

182801 次浏览

一些信息存储在 cookie 中,这些信息与正在开发的早期版本的幼虫有关。所以它与另一个版本生成的 csrf 标记相冲突。把饼干清理干净,试一试。

全都试试。

composer dump-autoload
php artisan optimize
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

如果您直接从搜索 得到这个答案,请确保您已经使用类似 OP 的 \{\{ csrf_field() }}将 csrf 标记添加到表单中。


如果将会话驱动程序设置为文件:

可能与 Storage _ path 不可写有关。如果您使用的是基于文件的会话,那么这里就是存储与令牌相关的会话数据的地方。可以用 is_writable(config('session.files'))进行验证


对于 OP,会话驱动程序被设置为 array。Array 仅用于测试。由于数据没有持久化,因此无法在下一个请求中比较令牌。

数组驱动程序在测试期间使用,并防止存储数据 在会话中保持。

https://laravel.com/docs/5.5/session#configuration


检查 config/session.php

最后,我刚才遇到的一个问题是,我们有一个项目在 config/session.php 中有会话域和安全设置,但是开发站点没有使用 HTTPS (SSL/TLS)。这导致了这个通用错误,因为 sessions.security 在默认情况下被设置为 true。

我在 Laravel 5.5遇到了同样的问题。在我的例子中,它发生在将路由从 GET 更改为 POST 之后。这个问题是因为我在切换到 POST 时忘记传递 CSRF 令牌。

您可以通过调用以下命令在表单中发布 CSRF 令牌:

 \{\{ csrf_field() }}

或者在 app/Http/Middleware/VerifyCsrfToken.php 中排除路由

 protected $except = [
'your/route'
];

This caused because of Illuminate\Session\TokenMismatchException 看看这个代码示例如何正确处理它:

Https://gist.github.com/jrmadsen67/bd0f9ad0ef1ed6bb594e

确保在你的 web 服务器上有正确的系统时间。在我的例子中,流浪机是在未来(Jan 2614:08:26 UTC 2226) ,所以当然我的浏览器会话 cookie 中的时间在200多年前就已经过期了。

我的应用程序有多个子域和会话 cookie 是这些之间的问题。清理饼干解决了我的问题。

另外,尝试在 .env文件中设置 SESSION_DOMAIN。使用正在浏览的确切子域。

在我的例子中,站点在服务器上很好,但是在本地就不行了。然后我记得我在做一个安全网站。
因此,在 config.session.php 文件中,将变量 security 设置为 false < br >

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

我修改了存储的权限,错误消失了。似乎缺乏权限是问题所在。

sudo chmod -R 775 storage/

对于那些仍然有问题,没有任何帮助。注意 php.ini mbstring.func _ overload 参数。必须设置为0。将 mbstring.Internal _ coding 设置为 UTF-8。对我来说,这是个问题。

我的案件是解决与 SESSION_DOMAIN,在我的本地机器必须设置为 xxx.localhost。它导致与直接在 session.php 配置文件中设置的生产 SESSION_DOMAINxxx.com发生冲突。

设定 Func _ load = 2

帮助了我

为了避免这些错误,我已经找到了两种解决方案 1)通过添加受保护的 $but = [’/yourpath’]可能禁用来自已定义根的 csrf 令牌检查。 2)在内核的受保护中间件组中注释 App Http Middleware VerifyCsrfToken: : class 行

我有同样的问题,但问题不是在框架,而是在浏览器。我不知道为什么,但谷歌铬块饼干自动,在我的情况下。在允许 cookie 之后,问题得到了解决。

长话短说

Add the route entry for register in app/Http/Middleware/VerifyCsrfToken.php

protected $except = [
'/routeTo/register'
];

并使用以下命令清除缓存和缓存路由:

php artisan cache:clear && php artisan route:clear

细节

每次访问 Laravel 站点时,即使会话尚未启动,也会生成一个令牌。然后,在每个请求中,这个令牌(存储在 cookie 中)将根据其过期时间进行验证,在 config/session.php文件的 SESSION_LIFETIME字段中设置。

如果保持站点开放超过过期时间并尝试发出请求,则将计算此令牌并返回过期错误。因此,要跳过对身份验证用户函数(如注册或登录)之外的表单进行验证,可以在 app/Http/Middleware/VerifyCsrfToken.php中添加除外路由。

在表单中添加 @csrf 也可以访问 VerifyCsrfToken.php

App-> Http-> Middleware-> VerifyCsrfToken.php

protected $except = [
'paste your route here'
];

Many time its happening because you are testing project in back date

解决方案:

使用匿名新标签,然后再次测试。

原因:

在我的情况下,另一个用户登录到我的管理面板

我遇到了同样的问题,但是后来意识到 htdocs 文件夹没有完整的权限。因此,我更改了 htdocs 文件夹中所有子目录的权限,方法是: sudo chown -c -R $USER:$USER /opt/lampp/htdocs/*

登录以连接到服务器。

Search Error

出现了一个错误: 搜索错误,您没有豌豆。

搜索请求更长。