在不同的应用服务器上生成新的 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的主要内容,如果未能解决你的问题,请参考以下文章

C#和sqlserver中生成新的32位GUID

如何在 Xamarin.Android 应用上集成新的 Google 登录?

在啥条件下创建 JSESSIONID?

更改 cookie JSESSIONID 名称

github上传代码

如何将 SameSite 和 Secure 属性设置为 JSESSIONID cookie