3

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

问题描述

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

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

发出了两个 GET 请求

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

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

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

在此处输入图像描述

4)这种情况并非每次都发生,一旦发生此问题,如果我们回到 register1.do 页面刷新(F5)/硬刷新(Ctrl + F5),那么对验证码的 GET 请求不会覆盖 JSESSIONID cookie并且用户注册工作正常。

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

  • 谁能帮我确定这里可能出现的问题?

  • 为什么我们进行页面刷新时会话不会被覆盖?

4

2 回答 2

1

将您的 apache mod_cluster 二进制文件更新为 mod_cluster 1.2.6.Final,可在此处获得。

这为我解决了这个问题,每次刷新后都会跳转服务器。希望这会有所帮助。

于 2013-10-28T16:50:07.223 回答
0

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

Entry-per-Session 意味着每当源 IP 打开新会话(唯一源端口)时,设备都会创建额外的客户端表条目。这使该单元可以更准确地跟踪会话数,但它的行为是继续将所有流量从客户端的源 IP 发送到同一台服务器。

在 Server-per-Session 模式下,设备以相同的方式跟踪唯一源端口,但是当客户端打开新会话时,设备会为新会话做出新的负载平衡决策。这样,来自同一客户端 IP 的多个会话可以在所有服务器之间“喷洒”,而不是卡在单个服务器上。

于 2017-02-07T13:48:06.123 回答