bugfix> php > 投稿

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 Sorry, your session has expired. Please refresh and try again.

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

回答 5 件
  • 以下を読む前に、 @csrf があることを確認してください  または {{ csrf_field() }}  フォームで

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

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

    次に、確認する他の領域はセッションです。ザ・ csrf  トークンの検証はセッションに直接関係するため、セッションドライバが機能しているかどうかを確認することをお勧めします。たとえば、Redisが正しく構成されていないと問題が発生する可能性があります。

    たぶん、 .env からセッションドライバー/ソフトウェアを切り替えてみてください。  ファイル、サポートされているドライバーを以下に示します

    Laravel 5.7でサポートされるセッションドライバー(ドキュメントリンク)

    file  -セッションはstorage/framework/sessionsに保存されます。

    cookie  -セッションは、暗号化された安全なCookieに保存されます。

    database  -セッションはリレーショナルデータベースに保存されます。

    memcached  / redis  -セッションは、これらの高速なキャッシュベースのストアのいずれかに保存されます。

    array  -セッションはPHP配列に格納され、永続化されません。

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

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

    おそらく、 /storage の権限の問題のために、ファイルベースのセッションが機能しない可能性があります  ディレクトリ(クイックグーグルで解決策を取得します)

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

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

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

    ブラウザキャッシュをクリアHard、クロームとFirefoxが原因であることがわかりました。

    アプリケーションキーが重要である理由の詳細を読む

  • これは、フォームにcsrfが必要なためです。バージョン5.7では、@ csrfに変更しました

    <form action="" method="post">
        @csrf
        ...
    
    

    Referene: https://laravel.com/docs/5.7/csrf

  • Laravel5.7を使用しています 私は同じ問題を抱えていましたが、それはcsrfトークンがフォームになかったためでした

    @csrf
    
    

    問題を修正

  • case 1 : if you are running project in your local system like 127.0.01:8000 ,

    then

    SESSION_DOMAIN= を追加  .envファイル内

    またはconfig/session.php 'domain' => env('SESSION_DOMAIN', ''),

    次に php artisan cache:clear を実行します

    case 2: if project is running on server and you have domain like "mydomain.com"

    SESSION_DOMAIN=mydomain.com を追加  .envファイル内

    またはconfig/session.php 'domain' => env('SESSION_DOMAIN', 'mydomain.com'),

    次に php artisan cache:clear を実行します

  • 使用方法

    {{ csrf_field() }}   @csrf の代わりに

    419エラーの主な原因はcsrfトークンの問題です。

あなたの答え