在集群 Websphere 环境中,我使用以下代码检索当前 HTTP 请求的 JSESSIONID
:
HttpServletRequest servletRequest = ...;
servletRequest.getSession().getId();
从这段代码中,我得到了标识符,如下所示:z84d621pxY1VChlK_0eEgFZ
。
然后,如果我检查浏览器上的 cookie,我会看到 JSESSIONID 包含上述 ID,但还包含其他信息,例如0000z84d621pxY1VChlK_0eEgFZ:18fjt9t1u
令我惊讶的是 HttpServletRequest.getSession().getId()
没有给我正确的标识符。
请注意,如果我使用 Tomcat 进行测试,我总是得到相同的值。
我应该如何获取完整的 JSESSIONID
值?
最佳答案
它为您提供了正确的标识符 - session 标识符。其余部分是与 WebSphere 内部相关的部分。 WebSphere session cookie 由 3 部分组成:
- 纪元编号
- session ID
- 克隆 ID
网络容器使用纪元号(前四位数字)来确保缓存的 session 不会过时。
session ID - 是实际的 session 标识符,它允许容器找到用户 session
克隆 ID - 由与 Web 服务器一起安装的 WebSphere 插件使用,将请求转发到保存与 session 关联相关的 session 数据的服务器。
为什么你需要其他部件?它们不识别 session ,并且可能在 session 生命周期内发生变化。
更新
您可以使用 cookie api 获取完整的 session ID:
Cookie cookies[] = request.getCookies();
for(int i = 0; i< cookies.length; i++) {
out.println(cookies[i].getName() + " " +cookies[i].getValue()+ " <br>" );
}
// output:
JSESSIONID 00002ikOjIY63tLqbF-6OF0QxL8:-1
关于jakarta-ee - 检索 Websphere 集群上的完整 JSESSIONID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25141894/