会话在具有负载均衡器和粘性会话的JBOSS集群环境中无效

时间:2013-10-18 06:50:29

标签: java cookies jboss load-balancing jsessionid

我们在使用负载均衡器和粘性会话的JBOSS集群环境中部署的Struts应用程序中面临一个问题

问题说明

1)此问题发生在用户注册功能中,该功能有2页,register1.do和register2.do页面

2)当用户点击注册网址时,https://ourwebsite.com/register1.do

发出两个GET请求

获取register1.do(获取第一个注册页面并在会话中设置少量值)

GET captcha.do(这会加载要在register1.do上显示的验证码图像)

3)有时会发生的事情是对register1.do的GET请求设置一个JSESSIONID cookie和GET请求到第一个请求设置的captcha.do over write JSESSIONID cookie。这会导致第二个注册页面出现问题,因为它会获取存储在会话中的一些值,并且当会话被验证码覆盖时,无法获得任何值。 见下图

enter image description here

4)这种情况不会每次都发生,一旦出现这个问题,如果我们回到register1.do页面刷新(F5)/硬刷新(Ctrl + F5)那么GET请求到captcha.do就不会结束编写JSESSIONID cookie并且用户注册工作正常。

此外,这只发生在集群环境中,在单个JBOSS环境中它可以正常工作。

  • 任何人都可以帮我确定可能出现的问题 在这?

  • 为什么在我们进行页面刷新时会话无法覆盖?

2 个答案:

答案 0 :(得分:1)

将apache mod_cluster二进制文件更新为mod_cluster 1.2.6.Final,可用here

这解决了我,每次刷新后跳过服务器。希望这会有所帮助。

答案 1 :(得分:0)

我也遇到过与jboss eap 6.1相同的问题,在负载均衡器中我使用mod_cluster配置我将服务器从每个会话的服务器更改为每个会话的进入,并且粘性会话运行良好且良好。通过以下内容了解每个会话的入口和每个会话的服务器。

每个会话进入意味着只要源IP打开新会话(唯一源端口),设备就会创建其他客户端表条目。这使得该单元能够更准确地跟踪会话数量,但其行为是继续将来自客户端的源IP的所有流量发送到同一服务器。

在每个会话服务器模式下,设备以相同的方式跟踪唯一的源端口,但是当客户端打开新会话时,设备会为新会话做出新的负载平衡决策。这样,来自同一客户端IP的多个会话就可以被喷射到#39;在所有服务器中,而不是粘在一台服务器上。