在不同的应用服务器上生成新的 JSESSIONID
Posted
技术标签:
【中文标题】在不同的应用服务器上生成新的 JSESSIONID【英文标题】:Generate new JSESSIONID when on different application server 【发布时间】:2014-10-22 11:36:07 【问题描述】:我有一个系统,在多个 apache 服务器后面有多个 jboss (4.2.3) 服务器。
在其中一台 jboss 服务器出现故障的情况下,我们仍然会为这些服务器提供会话的用户,但是由于 JSESSIONID 中的应用程序服务器 ID,它们会在服务器周围“反弹”,导致 apache 发送请求为每个请求发送到随机服务器,导致会话超时错误。
我最初的想法是在应用程序中创建一个拦截器,以在我们检测到会话实际上是针对不同服务器的情况下使会话无效(即 session.invalidate()) 但这不会导致生成新的 JSESSIONID(即使使用此处描述的修复程序 https://issues.jboss.org/browse/JBAS-4436)
我的下一个想法是创建一个阀门来完成相同的工作,但在 Request 而不是 HttpServletRequest 上,但是我找不到将 ValveBase 添加到 jboss 4.2.3 的库(我什至不确定阀门受 4.2.3 支持)
有没有:
a) 我在实现上述两个想法之一时遗漏的任何事情 要么 b)我没有想到解决问题的任何更好的想法? (我想集群会话,但由于基础设施问题目前不能)
谢谢。
【问题讨论】:
【参考方案1】:在 Apache 中使用 Session Stickyness,这样它就不会切换到其他应用程序服务器,直到它死掉。
【讨论】:
我已经打开了 Session Stickyness,这就是问题所在,一旦它死了,它就会继续尝试粘在服务器上,一切都很好,直到其中一个应用程序服务器死了。 这是预期行为以上是关于在不同的应用服务器上生成新的 JSESSIONID的主要内容,如果未能解决你的问题,请参考以下文章