【问题标题】:Session Management - Websphere Application Server会话管理 - Websphere 应用服务器
【发布时间】:2026-01-18 09:35:01
【问题描述】:

我有一个关于会话管理的问题。这是场景。

同一网络上有 3 组用户。有一个 J2EE 应用程序设置为在 60 分钟后结束用户会话。这些组是 A、B 和 C。现在 A、B 和 C 组都登录到 J2EE 应用程序并开始使用它。 A 组用户可以毫无问题地使用该应用程序。 B组和C组虽然被踢出的次数不同,但都在60分钟的设定时间之前。现在来自 A 组的用户转到 B 组的 PC。 B 组用户使用其 AD 凭据登录到他们的 PC,然后 A 组用户登录到 J2EE 应用程序。一段时间后,远在 60 分钟会话时间之前,A 组用户的会话提前结束。

还和我在一起吗?我希望如此。

现在 B 组用户转到 A 组用户的 PC 并执行与上述相同的操作。 A 组用户使用其 AD 凭据登录其 PC,B 组用户登录 J2EE 应用程序。 B 组用户没有超时问题,并且不会在 60 分钟设定的会话结束时间之前被踢出。

哇!所以看起来 J2EE 应用程序并没有终止用户的会话,因为 B 组用户在登录到 A 组用户 PC 时很好。

现在,有人能解释一下这是怎么发生的吗?我在想 Application Server (Websphere App Server 6.1) 可能被配置为做这样的事情,但我不是 websphere 管理员。

对于我可能尝试解决此问题的任何想法或建议将不胜感激。另外,请提出任何问题,因为我知道在解释发生的情况时可能遗漏了一些内容。

谢谢!

【问题讨论】:

  • 是否所有用户都遵循相同的路径进入应用程序?
  • 是的,所有用户都遵循相同的应用程序路径。
  • 不,我们没有使用 cookie。
  • 在用户登录(在 B 组的 PC 上)和被“踢出”后,会话 cookie 的外观如何?这些 cookie 的有效性是什么?
  • 还有一个问题:被“踢出”的用户到底发生了什么?他们会丢失会话数据吗?他们必须再次进行身份验证吗?

标签: java session jakarta-ee websphere


【解决方案1】:

您是否在代码中设置了 HttpSession.setMaxInactiveInterval(int secs)。这会覆盖 WebSphere 中的任何其他设置。也许你有一个正在设置的随机值?

【讨论】:

  • 我检查了 HttpSession.setMaxInactiveInterval(int secs),它只用在 1 个地方,并且该值不是随机值。它设置为 3600 秒(60 分钟)。
【解决方案2】:

除了尝试 Romain 提供的建议之外,还可以试试这个。您可以打印 HTTPSession 的内容(及其属性)并查看值是什么。

使用 HTTPSessionListener,您会在会话创建和销毁时收到通知。

这会告诉您会话何时被销毁。

很可能是应用程序中的某些东西触发了它。

很难说可能的问题是什么,我们可以初步尝试这些方法。

HTH 芒露

【讨论】:

  • 我会在我们的生产环境中的下一次计划部署期间尝试您的建议。但是你如何解释它只发生在 B 组和 C 组,但 ​​A 组在 60 分钟之前没有开球?他们都在打同一个应用程序。请再次阅读我的详细信息,您会注意到,当 B 组的用户使用 A 组用户的 PC 登录应用程序时,他没有在 60 分钟之前被踢出。这看起来不像是网络相关的吗?可能是 A 组 PC 的配置方式?
  • @Ruepen,我将检查 HTTP 标头并查看在每次调用中发送的 LTPA 令牌和 HTTP SessionID,并查看服务器何时不再发回 HTTPSessionID。这有效地造成了您被服务器踢出的印象。通过查看服务器端,并从 A 组的 PC 中查找 htese 会话 ID,您将能够得出合理的结论。网络不应选择性地删除某些 HTTP 标头信息。我并不是说网络不是罪魁祸首,但它不太可能是罪魁祸首。
最近更新 更多