Laravelでセッション操作していたところ、意図しない挙動にハマってしまったのでメモっておきます。
事象
あるコントローラーで Session::put でセッションに値を保存したはずなのに、次の処理のコントローラーにおいて Session::Get でその値を取得しようとすると、なぜかそのセッションが保存されていませんでした。
原因と対応
2つの要因が絡んでました。
1つ目は、Chromeにインストールしていた拡張機能 crxMouse Chrome Gestures のバグのため、以下のように意図しない /null がリクエストされていたことです。(本記事執筆時点ではバグは解消している模様)
2つ目は完全に僕の自爆行為だったのですが、一旦セッションをきれいにして開発をやりやすくする目的で、URLのTOP (e.g. http://localhost/) に戻ったらセッション変数をクリアする処理をいれていたことです。
この2つの挙動が合わさってセッションが消えていたため、拡張機能を無効にしてTOPの挙動も特に処理しないように修正して解決しました。
なお後述の参考リンクのようにChromeの拡張機能の影響で、予期せぬ2重リクエストが度々発生しているようです。この事象に限らず、開発中になにか問題が発生したら拡張機能のことも念頭にいれて原因追求したほうが良いかもしれません。
Tips
crxMouse Chrome Gesturesはこちらのプライバシポリシーのとおり、いくつかの情報が収集されているようです。
この収集を無効にするには、ツールバーのcrxMouseアイコン → 歯車アイコンをクリック もしくは、Chromeの設定 → 拡張機能 → crxMouse → 拡張機能のオプションをクリック して拡張機能の設定画面を開き、画面左ペインにある [ 人気のあるジェスチャーをオンにする(匿名データを送信する)] のチェックを外します。(気になる方は使わないのが一番かも)
今回は以上です〜ノシ
参考
(`・ω・´)ノ アリガトウゴザイマス!!
chromeで2重リクエスト問題
chromeで二重アクセスが起きてSession内容が変わってしまう