【问题标题】:Laravel "The page has expired due to inactivity" - TokenMismatchExceptionLaravel“页面由于不活动而过期” - TokenMismatchException
【发布时间】:2018-02-11 00:04:59
【问题描述】:

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

在本地主机上完美运行,但不能在实时服务器上运行

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

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

在发布请求之前,这是token

因此,csrf_token() 也使用相同的方法,但是在进行 post 调用时,请求正文使用上述令牌,而 session_token 使用新令牌(注意:会话令牌不会每次都创建新令牌)

发布请求后

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

【问题讨论】:

  • 您是否尝试过使用 laravel 配方来声明您的表单,例如 {{ Form::model($role, array('route' => array('roles.update', $role->id) , 'method' => 'PUT', 'class'=>"form-horizo​​ntal form-label-left","novalidate"=>'true')) }}
  • @StephenMudere 请找到更新后的问题,已添加form 代码
  • 你可以查看这个问题stackoverflow.com/questions/46149561/…
  • @bipinpatel 我对排除路线不感兴趣
  • @silverFoxA 我在这里也有同样的问题...我使用的是 MacBook OSX 10.12.6,该问题仅在本地出现在 dev 上,推送到 heroku 后它工作正常...请告诉我如果您找到了解决方案..

标签: laravel laravel-5 csrf


【解决方案1】:

那你为什么不通过 Session 外观添加令牌呢? 去掉csrf_field()方法并添加:

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

【讨论】:

  • 这里的问题是在post call之前,token是别的东西(基本上是以前的token),一旦发出post请求,token就是新的。如果我再次返回主页面或退出身份验证页面,则令牌就是前一个令牌本身。希望我能解释一下
猜你喜欢
  • 2018-02-10
  • 2018-08-31
  • 2019-07-11
  • 2018-10-01
  • 2018-07-22
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 2018-09-28
相关资源
最近更新 更多