JSESSIONID とか Cookie とか URL リライティングに関連する備忘録。
※Servlet API 3.x の話です。
レガシーな Web アプリのちょっとしたリプレース中なんですが、携帯サイトがなくなったり、サイト自体が SSL アクセスされるようになったりしたので、セッション維持に使ってた JSESSIONID の URL リライティング (JSESSIONID を URL に埋め込むやつ) をやめて、Cookie のセッションIDが使われるように設定を変更しました。
web.xml に以下の設定を追加。
<session-config> <tracking-mode>COOKIE</tracking-mode> </session-config>
しかし、初回アクセスかつリダイレクトが絡むようなケースの場合、なぜかリダイレクト先の URL に jsessionid パラメータが付与される...。で、調べてみたところアプリの中にこんなコードがありました。(抜粋)
boolean useCookie = request.isRequestedSessionIdFromCookie(); if (!useCookie) { // jsessionid を URL にくっ付ける処理 // もともとは携帯サイト向けの処理 }
意図的に URL に jsessionid を付与してました。ただ、今回は Cookie を使うように設定しているため、useCookie
は true となって if 文のブロックは実行されないはず。
どうやら、isRequestedSessionIdFromCookie()
は、web.xml ではなくリクエストに Cookie が含まれているかどうかで判定しているっぽい。なので、初回アクセスの場合には false を返すわけですね。(たぶん)
というわけで、このあたりの処理は削除して解決。