Я использую 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
?
Наконец я сам нашел точку:
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>
Надеюсь, это поможет ребятам, у которых такая же проблема.