Apache JK集群环境session丢失问题

来源:互联网 发布:做市商制度 知乎 编辑:程序博客网 时间:2024/05/21 08:55

这两天在搞集群,遇到一个些问题

项目描述:公司现有一个系统,页面的数据的布局都是ajax请求后台,得到html标签加载的,系统有权限控制,也就是session中会存放当前用户是否登录。通过以个过滤器进行监听,如果用户在请求后台数据时,发现session中没有当前用户的登录数据,就重定向到登录的页面,所以这里session中的数据一定要复制共享,否则用户登录信息会丢失。

问题描述:通过网上以些例子,做好了集群(在本地做测试),按网上的测试写个test.jsp,session可以共享,没有出现问题;将公司的系统加到集群里,就出问题了,在页面不断的刷新有时候就会丢失了回话,查看后台日志,发现,原来session ID变了,也就是说session丢失了。

原因:因为网上给的测试例子是为了做测试,在配置是,route是定了值,这个值将会加载session的id后面。BalancerMember ajp://www.merchant2.com:9010 loadfactor=1route=jvm3 ,问题就出在这里,页面的模块是重后台读取额,也就是说页面刷新时会请求后台,而浏览器与服务器的回话事同过cookie中的sessionid来维持的。假设现在页面的sessionid是:xxxxxxx.jvm3,刷新页面是,请求后台,Apache负责负载均衡,有可能分配的请求地址变成了。jvm2的那个tomcat,这是后jvm2中没有这个sessionid,服务器就会认为是给新的请求,在创建以个新的session,而那个session就完美的丢失了。因为这个sessionid会返回个页面,页面产生了新的sessionid,那么其他的服务器都不会存在,那么其他的服务器都会产生新的session.

解决方法,去掉Apache中配置的route这个属性和tomcat的server.xml中的route属性,这样集群的服务器上的sessionid都能保持一致性。

0 0