Tomcat7 SESSIONID 在应用后不断变化 redis RedisSessionManager 应用
Tomcat7 SESSIONID keep changing after applied redis RedisSessionManager applies
我在 Ubuntu16.04 中使用 tomcat7 和 oracle-java8。
我启动了 2 个不同的 tomcat 实例用于负载平衡,但默认行为是 session 无法在它们之间共享。
所以我转向了使用 RedisSessionManager 的解决方案。
在 tomcat conf/context.xml
文件中添加以下行后(当然我确实在 lib 目录中添加了依赖 jar):
<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 实例。
但是之后服务器好像不能保存session了,每次请求都返回了不同的Set-Cookieheader,因此即使使用单个 tomcat 实例登录也无法再工作。
如果我注释掉上面的行(在 context.xml
文件中),session 会按预期工作。
那么使用 RedisSesssionManager
是什么错误?
最后我自己找到了重点:
com.orangefunction.tomcat.redissessions.RedisSessionManager
请勿 支持为 session-timeout
设置设置 -1
值,而默认值支持。
就我而言,我的原始 web.xml
文件具有以下内容:
<session-config>
<session-timeout>-1</session-timeout>
<cookie-config>
<max-age>2592000</max-age>
</cookie-config>
</session-config>
其中 session-timeout
设置为 -1,这使得会话管理器总是写入 out-dated 会话,从而导致问题。
到那时我发现注释掉配置的这一部分将停止问题,经过一些实验,我发现我们只使用一个大的 session-timeout
而不是 -1
将使其工作很好:
<session-config>
<session-timeout>518400</session-timeout>
<cookie-config>
<max-age>2592000</max-age>
</cookie-config>
</session-config>
希望对遇到同样问题的小伙伴有所帮助。
我在 Ubuntu16.04 中使用 tomcat7 和 oracle-java8。
我启动了 2 个不同的 tomcat 实例用于负载平衡,但默认行为是 session 无法在它们之间共享。
所以我转向了使用 RedisSessionManager 的解决方案。
在 tomcat conf/context.xml
文件中添加以下行后(当然我确实在 lib 目录中添加了依赖 jar):
<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 实例。
但是之后服务器好像不能保存session了,每次请求都返回了不同的Set-Cookieheader,因此即使使用单个 tomcat 实例登录也无法再工作。
如果我注释掉上面的行(在 context.xml
文件中),session 会按预期工作。
那么使用 RedisSesssionManager
是什么错误?
最后我自己找到了重点:
com.orangefunction.tomcat.redissessions.RedisSessionManager
请勿 支持为 session-timeout
设置设置 -1
值,而默认值支持。
就我而言,我的原始 web.xml
文件具有以下内容:
<session-config>
<session-timeout>-1</session-timeout>
<cookie-config>
<max-age>2592000</max-age>
</cookie-config>
</session-config>
其中 session-timeout
设置为 -1,这使得会话管理器总是写入 out-dated 会话,从而导致问题。
到那时我发现注释掉配置的这一部分将停止问题,经过一些实验,我发现我们只使用一个大的 session-timeout
而不是 -1
将使其工作很好:
<session-config>
<session-timeout>518400</session-timeout>
<cookie-config>
<max-age>2592000</max-age>
</cookie-config>
</session-config>
希望对遇到同样问题的小伙伴有所帮助。