0

異なるサーバーで実行されている同じ Web アプリケーションの複数の個別のインスタンスがあります (すべて公開 IP が異なります)。セッションを利用して、現在ログインしているユーザーの情報を保存します。

HttpSession session = req.getSession(true);     

User user = (User)session.getAttribute("user");
if (user == null) {
  // get my user
  session.setMaxInactiveInterval(....);
  session.setAttribute("user", user);
}

問題は、あるインスタンス (インスタンス 1 と呼びます) にログインしてから別のインスタンス (インスタンス 2) にログインすると、インスタンス 1 に切り替えると、インスタンス 2 の Cookie が取得され、明らかに問題が発生することです。そのような ID はインスタンス 1 には存在せず、その ID に一致するユーザーを黙って見つけた場合はさらに悪い..

Cookie を調べたところ、JSESSIONID「localhost」のドメインで作成された Cookie は 1 つだけで、すべてのインスタンスで共有されています。ドメインをマシンのドメインに設定するように Tomcat を設定する方法はありますか?

私はTomcat 6.0.35を実行しています

どんな助けでも大歓迎です。ありがとうございました!

4

1 に答える 1

2

defaultHostサーバーのhostname(またはネットワーク名) に変更できます。Tomcat の構成ファイル
を見てください。conf/server.xml

<Engine ... defaultHost="myserver">

次に、以下も変更する必要があります。

<Host ... name="myserver">

参照:
http://tomcat.apache.org/tomcat-6.0-doc/config/engine.html
http://tomcat.apache.org/tomcat-6.0-doc/config/host.html

jvmRoute別の可能な解決策として、各インスタンスの「一意の名前」として定義できます。

<Engine ... jvmRoute="instance1">

JSESSIONIDこれにより、次のようなものが生成されます。

C85262796BE5F656BD8EF58A96F03C96.instance1
于 2012-10-09T01:29:54.017 に答える