1

在我们的 WebLogic 应用程序的一些调试过程中,我注意到 JSESSIONID 在用户注销后并没有改变。

我试图了解这是否是我需要关注的事情。

此应用程序是在 WebLogic 实例中运行的两个应用程序之一,我注意到它们都共享相同的 JSESSIONID。

这个问题参考了以下内容:

SRV.7.3 会话范围

HttpSession 对象的范围必须在应用程序(或 servlet 上下文)级别。底层机制,例如用于建立会话的 cookie,对于不同的上下文可以是相同的,但引用的对象,包括该对象中的属性,决不能由容器在上下文之间共享。

这表明最终由 WegLogic 来选择如何管理这些 JSESSIONID 值,我不应该尝试从值的变化(或缺少值)中解释含义。

此外,我HttpSessionListener在应用程序上连接了一个,我看到该sessionDestroyed方法被调用。

鉴于这两个元素,对我来说 JSESSIONID 没有改变似乎是安全的。但是,这与我习惯的行为不同,因此想验证我的假设。

JSESSIONID 不变是安全问题吗?

4

1 回答 1

3

不,这不应该是一个巨大的安全问题,因为与该会话实际关联的所有数据都被丢弃了。这JSESSIONID只是那个(现在不存在的)数据的关键。

但是,如果您想JSESSIONID在每次注销/登录时更改,您可以实现您的注销功能,以便JSESSIONID在用户注销时显式删除 cookie。然后服务器将在他们的下一个请求中为他们分配一个全新的会话/ID。

当然,如文档中所述,如果您有多个上下文恰好都依赖于单个JSESSIONIDcookie,那么从一个 cookie 中删除它实际上会将其从所有上下文中删除,从而有效地将用户从服务器上的每个上下文中注销。尽管在实践中,拥有多个面向用户的上下文并不常见,每个上下文都有自己的登录/会话状态。

于 2012-04-10T01:32:39.207 回答