質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1306閲覧

Laravel 5.4上で頻発するTokenMismatchException

unorigino

総合スコア128

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

2クリップ

投稿2018/03/13 10:50

前提・実現したいこと

Laravel 5.4.36を使用してサイトを構築しています。
フォームでデータをPOSTする際に、TokenMismatchExceptionが頻発し、以下のような症状で困っております。

-フォーム画面(register.blade.php)で{{ csrf_field() }}を設定しています。

-常に発生するわけではなく、2~3回に1回発生します。

-主にブラウザの「戻る」ボタンや、javascript:history.back() で戻り、もう一度送信すると発生しますが、日を起きその日はじめての送信でも発生する場合が多々あります。

-エラーが発生し、ブラウザの「戻る」ボタンで戻り、Chromeの「キャッシュの消去とハードの再読み込み」でキャッシュをクリアし再送信すると発生しづらいような気がします。(発生がランダムなので確実な検証はできませんでした。)

-5.4.21で別のサイトも運用していますが、同じように頻発します。

MiddlewareのVerifyCsrfToken.php上で、頻発すると困るURLを除外してなんとか対応しておりますが、同じような状況に陥った方、また解決策がお分かりになる方がいらっしゃいましたら是非教えてください。

発生している問題・エラーメッセージ

(1/1) TokenMismatchException ------------------------------------ in VerifyCsrfToken.php (line 68) ------------------------------------ at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php (line 148)

該当のソースコード

PHP

1 2[register.blade.php] 3 4<form class="default" action="/register/confirm" method="post"> 5 6-中略- 7 8{{ csrf_field() }} 9<div class="application tac"> 10 <button type="submit">確認画面へ</button> 11</div> 12 13</form>

試したこと

時間をおいてPOSTしたり、キャッシュを削除してみたりしましたがやはり特定の解決策は思い当たらず、エラー発生しなくなるまで何度もPOSTしている現状です。
また、5.4.21で実際に稼働しているサイトは、利用者からもTokenMismatchExceptionが出ると報告がありました。

補足情報(FW/ツールのバージョンなど)

XAMPP Version 5.6.24
Apache 2.4.23
MariaDB 10.1.16
PHP 5.6.24 (VC11 X86 32bit thread safe) + PEAR
phpMyAdmin 4.5.1
OS Windows 7
ブラウザ Chrome 64.0.3282.186

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Laravel5.5ですが、
CSRFトークンの処理に関係するところとしては、
App\Http\Kernelのwebグループに登録している、\Illuminate\Session\Middleware\StartSessionミドルウェアでセッションを開始して
Illuminate\Session\Storeのstartで呼出しているregenerateTokenでセッションの_tokenキーが無い場合に、トークン新規生成
Illuminate\Foundation\Http\Middleware\VerifyCsrfTokenのtokensMatchでセッションの_tokenキーとリクエストから送られてきたトークンを比較しているので、

  • 画面遷移中でドメインが別になるなどしてセッションキーに使うクッキーが上手く渡っていない
  • セッションの有効期限が画面遷移中に切れてセッションデータが無くなってしまっている
  • ログイン中にセッションを途中で再生成するなどでセッションの_tokenキーがHTMLに書き込まれているものとかわっている

等がひとまず考えられるかもしれませんね

投稿2018/03/14 04:48

aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unorigino

2018/03/16 10:49

返信いただきありがとうございます! 今開発段階でご指摘頂いた内容をチェックしておりますが、SESSION関係に疎く時間がかかってしまいそうだったので、取り急ぎお返事させていただきます。 入力画面→確認画面→完了画面 において、入力画面にしかcsrf_token()は埋め込んでおらず、sessionも途中で再生成していないので、確率としてはクッキーなどの問題なのでしょうか。 開発初期段階であまり干渉するようなプログラムもなく、開発環境も至って普通なので自分だけエラーが頻発するというのも不思議ですが、、 お答えいただいた内容をもう少し調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問