php - "ページが非アクティブなため期限切れになった"-Laravel 5.5




csrf laravel-5.5 (11)

私の登録ページでは、フォームにCsrfToken( {{ csrf_field() }} )が適切に表示されています)。

フォームHTML

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

ユーザーに組み込みの認証を使用しています。 ルートとリダイレクト以外は何も変更していません。

フォームを送信すると(リロード直後でも)、 非アクティブのためにページが期限切れになったことがわかります。 更新してもう一度お試しください。 エラー。

私は非常に小さなものを見逃しています。 しかし、それが何であるかはわかりません。 助けてください

更新

問題が見つかりました。 セッションドライバーは配列に設定されました。 ファイルに変更すると、エラーはなくなりました。 しかし、配列を使用するとどうなりますか?


Laravel 5.5で同じ問題に遭遇しました。 私の場合、GETからPOSTにルートを変更した後に発生しました。 問題は、POSTに切り替えたときにCSRFトークンを渡すのを忘れたためです。

次の呼び出しにより、フォームにCSRFトークンを投稿できます。

 {{ csrf_field() }}

または、app / Http / Middleware / VerifyCsrfToken.phpでルートを除外します

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

Webサーバーのシステム時刻が正しいことを確認してください。 私の場合、浮浪者マシンは将来(Jan 26 14:08:26 UTC 2226)だったので、もちろん私のブラウザーのセッションCookieの時間は約200年以上前に切れていました。


これらのエラーを回避するための2つの解決策を見つけました1)protected $ except = ['/ yourroute']を追加して、定義済みルートからcsrfトークン検査を無効にします。 2)カーネルの保護されたミドルウェアグループのコメント\ App \ Http \ Middleware \ VerifyCsrfToken :: class行


それらをすべて試してください。

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

アプリに複数のサブドメインがあり、セッションCookieがそれらの間の問題でした。 Cookieをクリアすると問題が解決しました。

また、 .env ファイルで SESSION_DOMAIN を設定してみてください。 閲覧している正確なサブドメインを使用してください。


ストレージのアクセス許可を変更すると、エラーがなくなりました。 許可の欠如が問題であると思われた。

sudo chmod -R 775 storage/

一部の情報は、開発中のlaravelの以前のバージョンに関連するCookieに保存されます。 そのため、他のバージョンによって生成されるcsrf生成トークンと競合しています。 Cookieをクリアして、試してみてください。


私のケースは SESSION_DOMAIN で解決され、ローカルマシンでは xxx.localhost に設定する xxx.localhost 。 session.php構成ファイルで直接設定された xxx.com SESSION_DOMAIN xxx.com との競合を引き起こしていました。


私は同じ問題を抱えていましたが、問題はフレームワークではなくブラウザにあります。 理由はわかりませんが、私の場合、google chromeはcookieを自動的にブロックします。 Cookieを許可した後、問題は解決しました。


mbstring.func_overload = 2を 設定します

それは私を助けた


短い答え

app/Http/Middleware/VerifyCsrfToken.php register するためのルートエントリを追加し app/Http/Middleware/VerifyCsrfToken.php

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

コマンドを使用してキャッシュとキャッシュルートをクリアします。

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

詳細

Laravelサイトにアクセスするたびに、セッションが開始されていなくてもトークンが生成されます。 次に、各リクエストで、このトークン(Cookieに格納されている)は、 config/session.php ファイルの SESSION_LIFETIME フィールドで config/session.php された有効期限に対して検証されます。

有効期限を超えてサイトを開いたままにしてリクエストを試みると、このトークンが評価され、有効期限エラーが返されます。 そのため、認証されたユーザーの機能の外にあるフォーム(登録やログインなど)でこの検証をスキップするには、例外ルートを app/Http/Middleware/VerifyCsrfToken.php 追加できます。