一、影响因素
- Tomcat web.xml
Tomcat 下conf文件夹中web.xml配置文件中的session-timeout参数会影响session时间 - 项目配置中的web.xml
项目配置中的web.xml配置文件中的session-timeout参数可能会影响session时间 - redis中的session
redis中的sessoion过期时间可能会影响session过期
二、测试步骤
- redis中session的影响
- 修改数据库中redisExpiretime的配置
修改数据库EDCC03中redisExpiretime的配置为60,通过client查看后发现session的TTL时间不会产生变化,是项目里设置好的8小时,以上操作证明session过期和该配置无关。 - redis中session过期,浏览器中未过期
在redis client中修改session的TTL时间,时间到期后,刷新页面,没有跳转至登陆页面,原session将会重新添加到redis中并重置过期时间。 - redis中session未过期,浏览器中session因项目中web.xml或重启项目过期
过期后刷新页面后。跳转至登录页,登录后,redis会丢弃原有的session,替换成新的session。 - redis中session未过期,浏览器中session因项目中web.xm未过期
每次进行操作后会进行redis中的sessionTTL时间重置
以上操作证明页面session过期与redis中储存的session并非强关联。
- tomcat中session-timeout的影响
修改tomcat中的web.xml参数session-timeout,在项目中存在web.xml配置文件时不生效,仍然根据项目中的web.xml配置的参数丢弃session数据。 - 项目中session-timeout的影响
设置WEB-INF/web.xml中session-timeout的时间为2min,在画面运行2min中后,刷新页面需要登陆页面。项目中的web.xml配置生效。
三、测试结论
- 项目下web.xml配置的session-timeout优先级高于tomcat下web.xml配置的session-timeout
- session过期时间与redis中的配置的session过期时间无关
四、建议配置
建议项目的web.xml中session-timeout参数配置为10080(七天),EDCC03中redis过期时间(iplat.core.cache.redisExpireTime)配置为604800000
五、问题
- sessionId篡改
问题现象:
在同一个服务器下,使用不同tomcat、不同的端口(8080,18080)、不同的redis(6379,6380)、不同的mysql数据库(iplat/iplatdb,iplattest/iplattestdb),启动两个iplat项目,分别访问127.0.0.1:8080/iplat和127.0.0.1:18080/iplat,用户在同一浏览器上,开启两个tab页,分别访问127.0.0.1:8080/iplat和127.0.0.1:18080/iplat登录页,登录进入8080端口的iplat之后,再登陆18080端口的iplat,原来8080端口的iplat需要重新登陆
原因分析:
经调试发现,浏览器访问127.0.0.1:8080/iplat服务时,前端浏览器生成的sessionId为A;当同时使用浏览器访问127.0.0.1:18080/iplat服务时,前端浏览器生成的sessionId为B,且127.0.0.1:8080/iplat页面的sessionId也变成了B;因此当127.0.0.1:8080/iplat页面再次刷新时,后台用sessionId B做校验时,session不存在及需要重新登录。由于两服务部署在同一服务器上,仅端口不一致,因此两服务相同域,猜测4j在生成sesion和进行sesion校验时,同域下session相同。同时,使用非同域的两iplat服务进行佐证,发现sessin未出现相互影响!