レッツトライ!しもしも

エンジニアときどきイラストレーターのしもしもがレッツトライ!したことを描くブログ

Chromeのセッションがリクエストされないときはfavicon.icoがないからかも

      2017/05/24

Apatch+Tomcat+Javaでローカル環境では問題ないのに、別環境だと発生したエラーの対応にすごく悩んだものに遭遇したので、メモ。

なぜかセッション切れが起きる

Apatch+Tomcatでローカル環境では問題ないのに、Linuxサーバだと、なぜかセッションに関わるところで落ちてしまう。

しかも、ブラウザによって挙動が異なってて。

IE、Safariだと問題なし。
Firefoxだと初回立ち上げのとき必ず起きて、2回目以降は問題なし。
GoogleChromeだと毎回起きる……。

なんじゃこりゃ…。

メンバーでしくはくしながらチェック。

ログを見るとリクエストしたときにセッションが連携されていないことがわかりました。
Chromeにあるデベロッパーツール>ネットワークの表示でリクエストやレスポンスを確認していると……。
JSESSIONIDが変わっている!?しかも、favicon.icoのところで!?

対処法

下の記事のタイトル通りなのですが、確認すると、ルートディレクトリにfavicon.icoがありませんでした。
なので、favicon.ico設置したら、解決した。

ChromeでURLルートディレクトリにfavicon.icoが無いとセッション切れする – Kasacchiful’s Blog

タイトルの件が発生したので、メモ。 Chromeでセッション切れ発生 とあるWebシステムで、Chromeでアクセスした際に、ログイン後の画面から別の画面へのリンクをクリックすると、ログイン画面に戻される。 再ログインした後の画面から別の画面へのリンクをクリックすると、またログイン画面に戻される …

まじかー。この記事見つけられなかったら、もっと悩んでいた。感謝かんしゃです……!!

おそらく発生していた挙動

おそらく、下の挙動が発生したと思われます。

開発していたJSPにfavicon.icoが設定されていない。
→デフォルトのfavicon.icoを読もうとする。
→ルートディレクトリにfavicon.icoなく、読み取れない。
→Tomcatのエラーページ表示処理が動き、GoogleChrome のみ セッションキー(JSESSIONID)の貼り直し。
→セッションキー(JSESSIONID)が異なる値になってリクエスト。
→セッションに関わる箇所でエラー発生。

そもそもfavicon.icoが読めれば発生しないので、JSPにfavicon.icoの設定があり、データが存在してれば、発生しないんじゃないかな?と思います。
(プロジェクトの状況を追うとアイコンのデザインが決まっていなくて、JSPに設定できていなかった。)

favicon.ico設置したら、Firefoxもエラー発生しなくなったので、Chromeと同じ現象が起きてたのだと思われます。

まとめ

こういうのよくあるのかな?まさかのicoデータが関連するとは思っても見なかった。今後のために、共有しておきますね……!

参考情報

ChromeでURLルートディレクトリにfavicon.icoが無いとセッション切れする – Kasacchiful’s Blog

タイトルの件が発生したので、メモ。 Chromeでセッション切れ発生 とあるWebシステムで、Chromeでアクセスした際に、ログイン後の画面から別の画面へのリンクをクリックすると、ログイン画面に戻される。 再ログインした後の画面から別の画面へのリンクをクリックすると、またログイン画面に戻される …

CSRF対策をやったらChromeでだけエラーになる|teratail

自前でPHPでやったCSRF対策 入力フォーム画面表示時に、 ランダムなトークンを発行してHTMLのhiddenに埋め込む。 同時に発行したトークンをセッションに保持する。 保存ボタンを押したときのアクションで セッションのトークンとPOSTされたトークンを比較して、

シェアする

 - Tips , ,