--> -->
手元のシステムはLaravel5.4で動いていました。
これを最新の6.xに移行したとき、頻繁に419 Session Expireエラーが出るようになった話です。
原因は、Session::regenerate()でした。
セッションIDの再生成はセキュリティの観点から推奨される処理です。
このregenerate()ですが、Laravel5.6.9から、実行時にCSRF TOKENも再生成されるようになりました。
regenerate the token on session regeneration
件のシステムは画面遷移時にほぼ毎回Session::regenerate()を実施していたため、エラーでredirect()->back()で戻った際などにTOKENが再利用される場合、419エラーが発生していたのでした。
regenerate処理のソースを見ると、
1 2 3 4 5 6 7 8 9 10 11 12 |
|
となっていて、migrate()実施後にトークンを作り直しているので、「Session::regenerate()」を「Session::migrate()」とすることで回避しました。
アクセス修飾子は public ですがマニュアルには載っていないので、一応自己責任で・・・。