Tomcat7 SESSIONID продолжает меняться после применения redis RedisSessionManager

Я использую tomcat7 с oracle-java8 в Ubuntu16.04.

И я запускаю 2 разных экземпляра tomcat для балансировки нагрузки, но поведение по умолчанию заключается в том, что сеанс не может быть разделен между ними.

Поэтому я обратился к решению с использованием в нем RedisSessionManager.

После того, как я добавлю следующие строки в файл tomcat conf/context.xml (конечно, я добавил банки зависимостей в каталог lib):

<Valve className = "com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className = "com.orangefunction.tomcat.redissessions.RedisSessionManager"
             host = "127.0.0.1"
             port = "6379"
             database = "0"
             password = "defuRedis2017"
             maxInactiveInterval = "60" />

Затем запустите один экземпляр tomcat.

Но после этого сервер, похоже, больше не может сохранять сеанс и возвращает в каждом запросе другой заголовок Set-Cookie, поэтому вход в систему больше не может работать даже с одним экземпляром tomcat.

Если я закомментирую приведенные выше строки (в файле context.xml), сеанс будет работать как положено.

Так что же мешает работать с RedisSesssionManager?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наконец я сам нашел точку:

com.orangefunction.tomcat.redissessions.RedisSessionManagerНЕ ДЕЛАЙТЕ поддерживает установку значения -1 для параметра session-timeout, в то время как значение по умолчанию.

В моем случае мой исходный файл web.xml имеет следующее содержимое:

<session-config>
    <session-timeout>-1</session-timeout>
    <cookie-config>
        <max-age>2592000</max-age>
    </cookie-config>
</session-config>

Где session-timeout установлено значение -1, и это заставляет диспетчер сеансов всегда записывать устаревший сеанс, что вызывает проблему.

К тому времени я обнаружил, что закомментирование этой части конфигурации решит проблему, и после некоторых экспериментов я обнаружил, что мы просто используем большое session-timeout, а не -1, чтобы все работало нормально:

<session-config>
    <session-timeout>518400</session-timeout>
    <cookie-config>
        <max-age>2592000</max-age>
    </cookie-config>
</session-config>

Надеюсь, это поможет ребятам, у которых такая же проблема.

Другие вопросы по теме