Изменение имени файла cookie JSESSIONID

У меня есть требование запуска нескольких серверов tomcat в одном физическом поле. При доступе к ним из браузера, когда пользователь переключается между приложениями, он приводит к выходу из приложения, ранее доступного пользователю. Это связано с конфликтом cookie JSESSIONID.

Одним из возможных решений является запуск каждого приложения в другом контексте. К сожалению, мои приложения не будут работать в настройках контекстного пути, так как ни один из ресурсов не будет доступен с запросом впереди перед запросом request.getContextPath().

Это позволяет мне изменить имя файла cookie JSESSIONID для разрешения конфликта. Есть ли способ сделать это? Если да, то как?

Надеюсь, я ясно заявляю о своем вопросе.

Примечание. Все мое приложение работает на другом порту на той же машине.

Ответ 1

Все гораздо проще с Servlet API 3.0.

Теперь вы можете настроить его в своем web.xml:

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

Что это!

Ответ 2

Используя два следующих системных свойства, это можно сделать с легкостью.

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

Любое значение может быть передано вышеприведенным свойствам для изменения значений по умолчанию.

Здесь полная информация с некоторым примером script.

Ответ 4

Ниже для меня работает Tomcat7 в файле context.xml:

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

Ответ 5

Я не думаю, что это возможно на данный момент - см. https://issues.apache.org/bugzilla/show_bug.cgi?id=42419

В последней записи говорится: "Это было исправлено в 5.5.x и будет включено в 5.5.28 вперед" - это следующий выпуск точки - 5.5.27 - текущая версия.

Ответ 6

Не уверен, что 100% это будет работать, но вы можете использовать атрибут jvmRoute, который обычно используется в среде с балансировкой нагрузки/кластеризации для балансировщика нагрузки, чтобы он мог разделить узлы друг с другом. Пример:

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

Это приведет к созданию значения JSESSIONID, которое выглядит как "ABCDEF123456.node1".

Ссылка документации.