58

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

考えられる解決策の 1 つは、各アプリケーションを異なるコンテキストで実行することです。残念ながら、前に request.getContextPath() を追加してアクセスするリソースがないため、私のアプリケーションはコンテキスト パス設定では機能しません。

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

私の質問を明確に述べていただければ幸いです。

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

4

8 に答える 8

63

Everything is much simpler with Servlet API 3.0.

Now you can configure it in your web.xml:

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

That's it!

于 2014-06-06T12:18:03.943 に答える
16

context.xml ファイルの Tomcat7 では、次のように動作します。

<Context path="/yourApp" sessionCookieName="custom_session_id">
于 2013-12-08T03:17:40.563 に答える
14

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

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

上記のプロパティに任意の値を渡して、デフォルト値を変更できます。

ここでは、いくつかのサンプル スクリプトを含む完全な詳細が見つかります。

于 2010-10-28T04:18:38.280 に答える
12

Tomcat 7 は、これを org.apache.catalina.SESSION_COOKIE_NAME からメインの <Context> 構成の属性に移動します。 http://tomcat.apache.org/migration-7.html#Session_manager_configuration

于 2012-05-25T13:16:35.810 に答える
4

現時点では不可能だと思います - https://issues.apache.org/bugzilla/show_bug.cgi?id=42419を参照してください

最後のエントリには、「これは 5.5.x で修正され、5.5.28 以降に含まれる予定です」と記載されています。これは次のポイント リリースです。現在のリリースは 5.5.27 です。

于 2009-05-18T12:23:32.117 に答える
2

これが機能するかどうかは 100% 確信が持てませんがjvmRoute、ロード バランサーがノードを区別できるようにするために、負荷分散/クラスター化された環境で一般的に使用される属性を使用できます。例:

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

これにより、「ABCDEF123456.node1」のような JSESSIONID 値が生成されます。

ドキュメント リンク

于 2009-05-18T12:56:38.400 に答える