tomcat session manger 的session失效问题(云问科技)
来源:互联网 发布:数据联邦 编辑:程序博客网 时间:2024/04/27 18:58
1. 客户端A访问A机器, A机器本地随机产生jsessionid - 目标memcache节点的别名, 如
D206172B7786671E0A6EB71D1F65F15F-n1
2. 此时session实例化, 存入membercached, key为D206172B7786671E0A6EB71D1F65F15F-n1
3. 此时客户端A访问B机器, 此时出现两种情况
Q1. 客户端A之前有cookie, 且存在jsessionid, 分两种情况
1. B机器存在该jsessionid对应的session缓存, 直接返回内存中的session
2. B机器没有该jsessionid对应的session缓存, 或已失效, 向memcache获取, 可正确获取, 由sessionManager实现类具体实现的map存储,同步反编译源码可知
Q2. 客户端A没有cookie
B机器写入jsessionid D206172B7786671E0A6EB71D1F65F15F-n1到客户端A, 回到Q1情况
4. 问题原因, tomcat session manger接口默认为粘性session配置
安装在Tomcat上的MSM使用本机内存保存session,和StandardManager一样。
另外,当一个请求结束时,session会被送回Memcached进行备份。
当下一次请求开始时,tomcat本地Session可用,直接服务,请求结束后,session又被送回Memcached备份, 这就是导致问题的原因
1. 解决方式1
基于给定策略的路由, 实现同一个jsessionid一定是访问同一台tomcat, 那么粘性session的配置会正确处理session的转移
启用粘性session后, 必须指定jvmroute参数来对请求做路由
<Engine defaultHost="localhost" name="Catalina" jvmRoute="tomcat71">
执行流程
1. 客户端A访问机器A, 得到jsessionid假设为 xx-n1:tomcat1
2. 客户端A访问机器B, 带回的jsessionid为 xx-n1:tomcat1, 与机器B的route不同, 此时机器B从memcache加载session, 并重写sessionid为 xx-n1:tomcat2
3. 此时客户端A重新访问A, 带回的jsessionid为 sessionid为 xx-n1:tomcat2, 回到2逻辑
2. 解决方式2
放弃粘性session, sticky="false"
非粘性session将每次从memcache中根据key load最新的session
5. 完整的配置文件
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes= "n1:114.55.66.121:12000"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sticky="false"
sessionBackupTimeout="500"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
copyCollectionsForSerialization="true" />
0 0
- tomcat session manger 的session失效问题(云问科技)
- Session失效的问题
- express-session遇到session失效的问题
- 关于session失效的问题?
- 解决session失效的问题
- tomcat服务重启后是session失效的方法
- Session失效问题
- Session 失效问题二
- session 失效问题
- 跨域session失效问题
- 关于php session自动失效的问题
- iframe中的session失效问题的解决
- session在frameset中失效的问题
- 使用过滤器处理Session失效的问题
- iis session 自动失效的问题
- ajax请求解决session失效的问题
- session失效问题的可能原因
- tomcat设置session失效时间
- tomcat中端口号被占用的问题
- 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
- Java 分支结构
- 分享一个前后端分离的轻量级内容管理框架
- SpringBoot入门系列: Spring Boot的测试(七)
- tomcat session manger 的session失效问题(云问科技)
- 第三周leetcode题
- LeetCode Permutations
- 几种常见的排序算法
- APT使用指南
- linux下curses的安装
- 开发一个Struts2需要的步骤
- C++面向对象程序设计——多态性和虚函数
- linux网络编程之setsockopt()函数来设置socket状态以及getsockopt函数只用总结