Ответ 1
Все гораздо проще с Servlet API 3.0.
Теперь вы можете настроить его в своем web.xml:
<session-config>
<cookie-config>
<name>MY_JSESSIONID_YAHOOOOOO</name>
</cookie-config>
</session-config>
Что это!
У меня есть требование запуска нескольких серверов tomcat в одном физическом поле. При доступе к ним из браузера, когда пользователь переключается между приложениями, он приводит к выходу из приложения, ранее доступного пользователю. Это связано с конфликтом cookie JSESSIONID.
Одним из возможных решений является запуск каждого приложения в другом контексте. К сожалению, мои приложения не будут работать в настройках контекстного пути, так как ни один из ресурсов не будет доступен с запросом впереди перед запросом request.getContextPath().
Это позволяет мне изменить имя файла cookie JSESSIONID для разрешения конфликта. Есть ли способ сделать это? Если да, то как?
Надеюсь, я ясно заявляю о своем вопросе.
Примечание. Все мое приложение работает на другом порту на той же машине.
Все гораздо проще с Servlet API 3.0.
Теперь вы можете настроить его в своем web.xml:
<session-config>
<cookie-config>
<name>MY_JSESSIONID_YAHOOOOOO</name>
</cookie-config>
</session-config>
Что это!
Используя два следующих системных свойства, это можно сделать с легкостью.
Любое значение может быть передано вышеприведенным свойствам для изменения значений по умолчанию.
Здесь полная информация с некоторым примером script.
Tomcat 7 перемещает это из org.apache.catalina.SESSION_COOKIE_NAME в атрибут основного <Context> конфигурации. http://tomcat.apache.org/migration-7.html#Session_manager_configuration
Ниже для меня работает Tomcat7 в файле context.xml:
<Context path="/yourApp" sessionCookieName="custom_session_id">
Я не думаю, что это возможно на данный момент - см. https://issues.apache.org/bugzilla/show_bug.cgi?id=42419
В последней записи говорится: "Это было исправлено в 5.5.x и будет включено в 5.5.28 вперед" - это следующий выпуск точки - 5.5.27 - текущая версия.
Не уверен, что 100% это будет работать, но вы можете использовать атрибут jvmRoute
, который обычно используется в среде с балансировкой нагрузки/кластеризации для балансировщика нагрузки, чтобы он мог разделить узлы друг с другом. Пример:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
Это приведет к созданию значения JSESSIONID, которое выглядит как "ABCDEF123456.node1".