Laravel“页面由于不活动而过期” - TokenMismatchException

时间:2018-02-10 13:27:38

标签: laravel laravel-5 csrf

Laravel创建新会话令牌,但在使用csrf_token()时使用旧令牌。验证它时使用新创建的session_token(),从而提供The page has expired due to inactivity.Please refresh and try again.TokenMismatchException

  

完全适用于localhost但不适用于实时服务器

我已经清除了所有缓存,但无法使其正常工作

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

在发布请求之前,这是token

enter image description here

因此csrf_token()也使用相同的但是当进行后调用时,请求主体使用上面的标记,其中session_token使用新标记(注意:会话标记不会每次都创建新标记)< / p>

发布请求后

enter image description here enter image description here

session.php文件

<?php

return [

    'driver' => env('SESSION_DRIVER', 'file'),

    'lifetime' => 1200,

    'expire_on_close' => false,


    'encrypt' => false,


    'files' => storage_path('framework/sessions'),


    'connection' => null,


    'table' => 'sessions',


    'store' => null,

    'lottery' => [2, 100],


    'cookie' => 'laravel_session',

    'path' => '/',


    'domain' => env('SESSION_DOMAIN', null ),

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


    'http_only' => true,

];

storage/framework/session有写入权限。

表格

<form method="POST" action="{{ route('login') }}" role="form">
                    {{ csrf_field() }}
                    <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required
                           autofocus>

                    <button type="submit" class="btn btn-green">Sign in</button>
                </form>

TIA

1 个答案:

答案 0 :(得分:0)

那你为什么不通过Session门面添加令牌呢? 删除csrf_field()方法并添加:

<input type="hidden" name="_token" value="{{ Session::token() }}" />