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

Tips

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

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

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

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

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

なんじゃこりゃ…。

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

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

対処法

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

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

タイトルの件が発生したので、メモ。 とあるWebシステムで、Chromeでアクセスした際に、ログイン後の画面から別の画面へのリンクをクリックすると、ログイン画面に戻される。 再ログインした後の画面から別の画面へのリンクをクリックすると、またログイン画面に戻される。 開発環境では発生せず、ステージング環境で発生してしまう。 ChromeのデベロッパーツールでCookieの値を確認してみる。 …

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

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

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

開発していた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が無いとセッション切れする

タイトルの件が発生したので、メモ。 とあるWebシステムで、Chromeでアクセスした際に、ログイン後の画面から別の画面へのリンクをクリックすると、ログイン画面に戻される。 再ログインした後の画面から別の画面へのリンクをクリックすると、またログイン画面に戻される。 開発環境では発生せず、ステージング環境で発生してしまう。 ChromeのデベロッパーツールでCookieの値を確認してみる。 …

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

自前でPHPでやったCSRF対策 入力フォーム画面表示時に、 ランダムなトークンを発行してHTMLのhiddenに埋め込む。 同時に発行したトークンをセッションに保持する。 保存ボタンを押したときのアクションで セッションのトークンとPOSTされたトークンを比較して、 一致していたらOK。不一致だったらエラーとする 上記の対策を入れたら Chromeの場合だけエラーになってしまいます。 IEだとエラーにならない。 この事象が以前手元の自分の環境で再現したことがありましたが、再現しなくなったので 問題なさそうんだと判断し、リリースしたのですが、 一部のユーザー(全員でない)で事象が発生するようになってしまいました。 自分の環境では再現しないため、原因を追えません。 どういったことが考えられるでしょうか 気になる質問をクリップする クリップした質問は、後からいつでもマイページで確認できます。 またクリップした質問に回答があった際、通知やメールを受け取ることができます。 クリップを取り消します 良い質問の評価を上げる 以下のような質問は評価を上げましょう 評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。 質問の評価を上げたことを取り消します 評価を下げられる数の上限に達しました 評価を下げることができません 1日5回まで評価を下げられます 1日に1ユーザに対して2回まで評価を下げられます 質問の評価を下げる teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。 プログラミングに関係のない質問 やってほしいことだけを記載した丸投げの質問 問題・課題が含まれていない質問 意図的に内容が抹消された質問 広告と受け取られるような投稿 評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。 質問の評価を下げたことを取り消します この機能は開放されていません 評価を下げる条件を満たしてません 質問の評価を下げる機能の利用条件 この機能を利用するためには、以下の事項を行う必要があります。