我们在使用负载均衡器和粘性会话的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。这会导致第二个注册页面出现问题,因为它会获取存储在会话中的一些值,并且当会话被验证码覆盖时,无法获得任何值。 见下图
4)这种情况不会每次都发生,一旦出现这个问题,如果我们回到register1.do页面刷新(F5)/硬刷新(Ctrl + F5)那么GET请求到captcha.do就不会结束编写JSESSIONID cookie并且用户注册工作正常。
此外,这只发生在集群环境中,在单个JBOSS环境中它可以正常工作。
任何人都可以帮我确定可能出现的问题 在这?
为什么在我们进行页面刷新时会话无法覆盖?
答案 0 :(得分:1)
将apache mod_cluster二进制文件更新为mod_cluster 1.2.6.Final,可用here。
这解决了我,每次刷新后跳过服务器。希望这会有所帮助。
答案 1 :(得分:0)
我也遇到过与jboss eap 6.1相同的问题,在负载均衡器中我使用mod_cluster配置我将服务器从每个会话的服务器更改为每个会话的进入,并且粘性会话运行良好且良好。通过以下内容了解每个会话的入口和每个会话的服务器。
每个会话进入意味着只要源IP打开新会话(唯一源端口),设备就会创建其他客户端表条目。这使得该单元能够更准确地跟踪会话数量,但其行为是继续将来自客户端的源IP的所有流量发送到同一服务器。
在每个会话服务器模式下,设备以相同的方式跟踪唯一的源端口,但是当客户端打开新会话时,设备会为新会话做出新的负载平衡决策。这样,来自同一客户端IP的多个会话就可以被喷射到#39;在所有服务器中,而不是粘在一台服务器上。