laravel 5.5由于不活动,该页面已过期.请刷新并重试

Sve*_*zar 59 php laravel

我是Laravel的新手,我有一个我不明白的问题.我在我的项目中有一个日志表单,我的方法是POST.当我尝试请求时,结果是:

'由于不活动,页面已过期.请刷新并重试."

但是,如果我将方法更改为GET,它可以正常工作.

有人能告诉我为什么会这样,以及如何解决它?因为我当然需要POST方法.

Eri*_*ars 162

此问题来自CSRF令牌验证失败.所以,要么你没有张贴一个,要么你发布的不正确.

它适用于GET的原因是,对于Laravel中的GET路由,没有发布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)


Man*_*ash 32

在我的情况下,我有相同的错误消息,然后发现我错过了csrf_token为表单字段添加.然后添加csrf_token.

使用表单助手,

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

或者没有表格助手,

<input type="hidden" name="_token" value="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,那么 -

刷新浏览器缓存

现在它可能会工作,谢谢.

Laravel 5.6的更新

Laravel整合了新的@csrf而不是{{ csrf_field() }}.现在看起来更好看.

<form action="">
   @csrf
   ...
</form>
Run Code Online (Sandbox Code Playgroud)


Udh*_*iya 7

无论何时在应用程序中定义HTML表单,都应在表单中包含隐藏的CSRF令牌字段,以便CSRF保护中间件可以验证请求.您可以使用csrf_field帮助程序生成令牌字段:

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>
Run Code Online (Sandbox Code Playgroud)

它不起作用,然后刷新浏览器缓存,现在它可能工作,

有关详细信息,请打开链接: - Laravel 5.5中的CSRF保护

更新:

Laravel 5.6使用Blades模板,非常简单.

<form method="POST" action="/profile">
    @csrf
    ...
</form>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请打开链接: - Laravel 5.6中的CSRF保护


小智 6

验证您的 config/session.php 文件是否包含这一行

'domain' => env('SESSION_DOMAIN', null),
Run Code Online (Sandbox Code Playgroud)

然后删除SESSION_DOMAIN.env 文件中的行

  • 您能详细说明一下吗?为什么,它有什么作用? (2认同)