集群中通过msm实现session共享,采用轮询的方式时session经常失效

zkldotnet 2013-11-14 10:27:36
最近有个任务是使用nginx+tomcat实现集群和负载均衡,同时结合使用memcached实现session共享。配置集群中没有什么问题,就是这个通过memcached+tomcat实现session共享这出现了问题,现在使用了两个tomcat服务器,一个memcached,当nginx中配置使用轮询的方式时,登录后系统之后操作的过程中频繁出现需要重新登录的情况,使用ip_hash的配置方式没有此问题。
最开始配置完memcached+tomcat后进行测试的时候,在两个tomcat中分别放一个简单的小项目,就是在首页上显示sessionID,采用轮询的方式,不断刷新,sessionID并不会改变,说明session已经共享了,不明白到项目中为什么会出现这样的问题。
两个tomcat的context.xml的添加manager标签,是一样的,配置如下
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
sticky="true"
memcachedNodes="n1:168.168.169.120:11211"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
server.xml的Engine标签中也都添加了jvmRoute属性。
在系统里有个检测session的过滤器,其中有句代码是
Httpsession session = request.getSession(false),
就是这句代码,该方法经常返回null,这时就会session失效。可是,在没有超时的情况下该方法怎么就返回null呢?
各位对此了解或遇到过此类情况的大神,请在百忙之中抽空指教下,在此先谢了。
...全文
601 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
走在下坡路 2013-11-20
  • 打赏
  • 举报
回复
你的nginx的策略是轮询的时候会出问题。 页面上显示sessionId,就能说明你session共享了? 你要查查session的信息是否放进了memcache里面,每次一个请求到你的tomcat,memcache里面的session信息是否会赋值到session里面。 如果request.getSession(false)为空,你要查查session的有效时间。。 你这个貌似通过tomcat弄的分布式session, 我以前是 改写了HttpSession,每次请求进来,就根据cookie的信息去memcache查询session的信息,请求结束就将session的信息保存进memcache
  • 打赏
  • 举报
回复
查下访问日志 帮顶

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧