在我们的WebLogic应用程序的一些调试过程中,我注意到JSESSIONID在用户注销后不会改变。
我试图了解这是否是我需要关注的事情。
此应用程序是在 WebLogic 实例中运行的两个应用程序之一,我注意到它们都共享相同的 JSESSIONID。
这个问题涉及以下内容:
SRV.7.3 会话范围
HttpSession 对象的作用域必须限定在应用程序(或 servlet) 上下文)级别。底层机制,例如用于 建立会话,对于不同的上下文可以相同,但是 引用的对象(包括该对象中的属性)不得 由容器在上下文之间共享。
这表明最终由WegLogic选择如何管理这些JSESSIONID值,我不应该试图从值的变化(或缺乏值)中解释意义。
此外,我已经在应用程序上连接了一个HttpSessionListener
,我看到sessionDestroyed
方法被调用。
鉴于这两个元素,在我看来,JSESSIONID 没有改变似乎是安全的。 但是,这与我习惯的行为不同,因此想验证我的假设。
JSESSIONID 不会更改是否是安全问题?
不,这不应该是一个巨大的安全问题,因为实际与该会话关联的所有数据都将被丢弃。 JSESSIONID
只是该(现在不存在的)数据的关键。
但是,如果您希望每次注销/登录时更改JSESSIONID
,则可以实现注销功能,以便在用户注销时显式删除JSESSIONID
cookie。 然后,服务器将在他们的下一个请求中为他们分配一个全新的会话/ID。
当然,如文档中所述,如果您有多个上下文,而这些上下文恰好都依赖于单个JSESSIONID
cookie,那么从一个上下文中删除它基本上会将其从所有上下文中删除,从而有效地将用户从服务器上的每个上下文中注销。 尽管在实践中,拥有多个面向用户的上下文并不常见,每个上下文都有自己的登录/会话状态。