Laravel での投稿リクエスト - エラー - 419 申し訳ありませんが、セッション/ 419 ページの有効期限が切れています 質問する

Laravel での投稿リクエスト - エラー - 419 申し訳ありませんが、セッション/ 419 ページの有効期限が切れています 質問する

Laravel 5.7をインストールしました

ファイルにフォームを追加しました\resources\views\welcome.blade.php

<form method="POST" action="/foo" >
    @csrf
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>
</form>

ファイルに追加されました\routes\web.php

Route::post('/foo', function () {
    echo 1;
    return;
});

POSTリクエストを送信した後:

419 申し訳ありませんが、セッションの有効期限が切れています。更新してもう一度お試しください。

バージョンでは5.6そのような問題はありませんでした。

ベストアンサー1

以下を読む前に、フォームに@csrfまたはがあることを確認してください{{ csrf_field() }}のように

<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>

Laravel でセッション期限切れまたは 419 ページ期限切れのエラー メッセージが表示されるのは、どこかで csrf トークンの検証が失敗したためですApp\Http\Middleware\VerifyCsrfToken::class。つまり、ミドルウェアがすでにオンになっているということです。フォームでは@csrfブレード ディレクティブがすでに追加されているので、これも問題ないはずです。

次に確認するもう 1 つの領域はセッションです。csrfトークンの検証はセッションに直接関係するため、Redis の設定が間違っていると問題が発生する可能性があるため、セッション ドライバーが動作しているかどうかを確認する必要があります。

ファイルからセッションドライバー/ソフトウェアを切り替えてみることもできます.env。サポートされているドライバーは以下の通りです。

Laravel 5、Laravel 6、Laravel 7 でサポートされているセッション ドライバー (ドキュメントリンク)

  • file- セッションは storage/framework/sessions に保存されます。
  • cookie- セッションは安全で暗号化された Cookie に保存されます。
  • database- セッションはリレーショナル データベースに保存されます。
  • memcached/ redis- セッションは、これらの高速なキャッシュベースのストアの 1 つに保存されます。
  • array- セッションは PHP 配列に保存され、永続化されません。

セッション ドライバーを切り替えた後にフォームが機能する場合は、その特定のドライバーに問題があるので、そこからエラーを修正してみてください。

エラーが発生しやすいシナリオ

  • おそらく、ディレクトリの権限の問題により、ファイルベースのセッションが機能しない可能性があります/storage(簡単に Google 検索すると解決策が見つかります)。また、ディレクトリに 777 を設定することは決して解決策ではないことに注意してください。

  • データベース ドライバーの場合、DB 接続が間違っているか、テーブルがsessions存在しない、または誤って構成されている可能性があります (@Junaid Qadir のコメントによると、誤った構成部分が問題であることが確認されています)。

  • redis/memcached構成が間違っているか、システム内の他のコードによって同時に操作されています。

php artisan key:generate新しいアプリ キーを実行して生成し、セッション データをフラッシュすることをお勧めします。

ブラウザのキャッシュをクリアする難しい、Chrome と Firefox が、私が覚えている以上に原因になっていることがわかりました。

アプリケーションキーが重要な理由について詳しく読む

おすすめ記事