yamadamn’s blog

IT関連技術で経験したこと・気になったことをたまに書きます

セッションID用クッキーの上書きを避ける

基本的には、「Weblogicに複数アプリケーションをデプロイ - きょうのできごころ@はてな」に書かれている通りで、複数のJ2EEアプリケーションに、同一FQDN*1でアクセスする場合は、セッションID用のクッキーが上書きされてしまうのを避ける必要があります。
そのためには、weblogic.xmlcookie-nameかcookie-pathを変更することになりますが、ここではその際の注意点を補足しておきます。

<追記>
上書きが問題になるのは、同一FQDNで異なるWebLogicインスタンス/クラスタにデプロイされているアプリケーションにアクセスする場合です。
同一のWebLogicインスタンスで複数のアプリケーションが存在する(=コンテキストルートが異なる)ケースは普通にあります。デフォルトのセッション管理設定*2を用いる場合、異なるコンテキストルートに対し同一のJSESSIONIDでアクセスすることになりますが、この場合は内部で適切にセッションを分けて管理してくれるため問題になりません。

cookie-name

前段にApacheなどWebサーバがいて、WebLogicクラスタに負荷分散を行うような構成は、割とポピュラーだと思います。デフォルトのJSESSIONIDからクッキーの名前を変更する場合、Webサーバのプラグイン設定でCookieNameも合わせておきましょう。そうしないと、リクエストごとに(デフォルトでは)ラウンドロビンでの振り分けとなり、セッションが正しく継続されなくなってしまいます。
また、負荷分散装置などでも、クッキーを参照する場合があるので、アプリケーション開発者の都合で勝手にクッキー名を変えるのではなく、インフラ担当者と相談したほうがよいでしょう。

cookie-path

前段にリバースプロキシがいて、パスの階層や名称を変える場合、cookie-pathもそれに合わせて変更する必要があります。Apacheでリバースプロキシをしている場合は、ProxyPassReverseCookiePathを設定すればOKかな。

*1:cookie-domainの設定をした場合は、そのドメイン

*2:cookie-nameは「JSESSIONID」で、cookie-path=「/」となる。このcookie-pathのデフォルト設定がいけてないと思われるが、それは後日記載する予定です。