"由于不活动,该页面已过期" - Laravel 5.5

Sou*_*ose 96 php csrf laravel laravel-5.5

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

表单HTML

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

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

当我提交表单时(仅在重新加载之后),它表示由于不活动而页面已过期.请刷新并重试.错误.

我很想念一个非常小的东西.但不确定它是什么.有帮助吗?

更新

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

Dev*_*von 152

如果您直接从搜索中获得此答案,请确保您已将{{ csrf_field() }}类似OP 的csrf令牌添加到表单中.


如果您将会话驱动程序设置为file:

可能与storage_path不可写有关.如果您使用基于文件的会话,这是存储有关令牌的会话数据的位置.可以通过验证is_writable(config('session.files'))


对于OP,会话驱动程序设置为数组. 数组仅用于测试.由于数据未持久存在,因此无法在下一个请求中比较令牌.

在测试期间使用阵列驱动程序,并防止存储在会话中的数据被保留.

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


检查config/sessions.php

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

  • 好.但目前它正在开发中.所以如果我使用数组,为什么它会给我这个错误? (3认同)

Hyd*_* B. 74

我在Laravel 5.5中遇到了同样的问题.就我而言,它是在将路由从GET更改为POST后发生的.问题是因为我在切换到POST时忘记传递CSRF令牌.

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

 {{ csrf_field() }}
Run Code Online (Sandbox Code Playgroud)

或者在app/Http/Middleware/VerifyCsrfToken.php中排除您的路线

 protected $except = [
        'your/route'
    ];
Run Code Online (Sandbox Code Playgroud)

  • `csrf_field()`出现在表单中.接受的答案描述了这个问题.谢谢. (2认同)

Sag*_*ing 8

尝试所有这些.

composer dump-autoload
php artisan optimize
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
Run Code Online (Sandbox Code Playgroud)


yuk*_*lia 6

这是因为Illuminate\Session\TokenMismatchException 查看此代码示例如何正确处理它:

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


小智 6

我的情况解决了SESSION_DOMAIN,在我的本地机器上必须设置为xxx.localhost. 它可能会导致与生产发生冲突SESSION_DOMAINxxx.com这是直接设置在session.php文件的配置文件。