2009-05-18 104 views
46

私は単一の物理ボックスで複数のtomcatサーバーを実行する必要があります。ブラウザからアクセスする際に、ユーザーがアプリケーションを切り替えると、以前にユーザーにアクセスしていたアプリケーションがログアウトされます。これは、JSESSIONIDのCookieの競合が原因です。クッキーJSESSIONIDの名前を変更する

可能な解決策の1つは、各アプリケーションを異なるコンテキストで実行することです。残念ながら、私のアプリケーションはコンテキストパス設定では動作しません。なぜなら、request.getContextPath()が先頭に前に付いているリソースはアクセスされないからです。

これにより、競合を解決するためにCookie JSESSIONIDの名前を変更する必要があります。これを行う方法はありますか?はいの場合、どうですか?

私の質問にはっきりとしています。

注:私のアプリケーションはすべて、同じマシンの異なるポートで実行されています。

+3

同時に複数のTomcatサーバーを同じポート上で同時に実行する方法はありますか? –

+2

@HarryLime:プロキシサーバーで発生する可能性があります。 – Thilo

答えて

4

私はそれがこの時点で可能だとは思わない - 次のポイントである - 最後の項目は、「これは5.5.xに修正され、以降5.5.28に含まれることになる」と述べhttps://issues.apache.org/bugzilla/show_bug.cgi?id=42419

を見ますリリース - 5.5.27が現在のリリースです。

+0

これを掘り下げていただきありがとうございます。私のために残されたオプションだけのように見えるのは、既存のTomcatソースを変更することです。 バグ/機能レポートには、私の正確な要件と解決策が明確に記載されています。 答えをありがとう。 – ramanr

2

ロードバランサがノードを区別できるように負荷分散/クラスタ環境で一般的に使用されているjvmRoute属性を使用できますが、これを使用することはできません。例:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"> 

これで、 "ABCDEF123456.node1"のようなJSESSIONID値が生成されます。

Documentation link

+0

これはクッキーの価値についてのものであり、その名前ではないのですか? –

13

次の2つのシステムプロパティを使用すると、これを簡単に実行できます。

  • org.apache.catalina.SESSION_COOKIE_NAME
  • org.apache.catalina.SESSION_PARAMETER_NAME

任意の値は、デフォルト値を変更する上記の特性に渡すことができます。

ここでcomplete detailsにサンプルスクリプトがあります。

+1

これはTomcat7 +ではもう機能しません。コンテキスト設定でこれを設定できます。@ timkingmanの答えをご覧ください。 – Thilo

+0

私はtomcat 6でこれをやったが、それでも同じ問題が発生している –

+0

桟橋はどうですか? – gstackoverflow

12

context.xmlファイル内Tomcat7に私のために、次の作品:

<Context path="/yourApp" sessionCookieName="custom_session_id"> 
45

すべてはサーブレットAPI 3.0と非常に簡単です。

今すぐあなたのweb.xmlにそれを設定することができます

<session-config> 
    <cookie-config> 
     <name>MY_JSESSIONID_YAHOOOOOO</name> 
    </cookie-config> 
</session-config> 

それだそれ!

+0

ベスト・アンサー! – x4k3p

関連する問題