複数実行する必要があります単一の物理ボックス内のTomcatサーバー。ブラウザからこれらにアクセスしているときに、ユーザーがアプリケーションを切り替えると、以前にアプリケーションにアクセスしたユーザーがログアウトされます。これは、JSESSIONID Cookieの競合が原因です。
考えられる解決策の1つは、各アプリケーションを実行することです異なるコンテキストで。残念なことに、request.getContextPath()が先頭に追加されたリソースにはアクセスされないため、アプリケーションはコンテキストパス設定で動作しません。
これにより、競合を解決するためにCookie JSESSIONIDの名前を変更する必要があります。これを行う方法はありますか?はいの場合、どのように?
私の質問をはっきりさせたいと思います。
注:私のアプリケーションはすべて、同じマシンの異なるポートで実行されています。
回答:
回答№1の51Servlet API 3.0を使用すると、すべてがはるかに簡単になります。
web.xmlで設定できるようになりました:
<session-config>
<cookie-config>
<name>MY_JSESSIONID_YAHOOOOOO</name>
</cookie-config>
</session-config>
それでおしまい!
回答№2の13
次の2つのシステムプロパティを使用すると、これを簡単に実現できます。
- org.apache.catalina.SESSION_COOKIE_NAME
- org.apache.catalina.SESSION_PARAMETER_NAME
上記のプロパティに任意の値を渡して、デフォルト値を変更できます。
ここに 完全な詳細 いくつかのサンプルスクリプトが見つかりました。
回答№3の12
Tomcat 7はこれをorg.apache.catalina.SESSION_COOKIE_NAMEからメインの<Context>設定の属性に移動します。 http://tomcat.apache.org/migration-7.html#Session_manager_configuration
回答№4の12
以下は、context.xmlファイルのTomcat7で機能します。
<Context path="/yourApp" sessionCookieName="custom_session_id">
回答№5の4
この時点では「考えられない」-参照 https://issues.apache.org/bugzilla/show_bug.cgi?id=42419
最後のエントリには、「これは5.5.xで修正され、5.5.28以降に含まれる予定です」-次のポイントリリースである-5.5.27が現在のリリースです。
答え№6の2
これが機能するかどうかは100%確かではありませんが、 jvmRoute
属性。一般に、ロードバランサーがノードを区別できるようにするために、ロードバランシング/クラスター化された環境で使用されます。例:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
これにより、「ABCDEF123456.node1」のようなJSESSIONID値が生成されます。