10

我在本地运行 Weblogic 10.3,并且对它生成的 sessionId 有疑问。当我打印 session.getId() 我看到类似这样的东西:

BBp9TAACMTglQ2TDFAKR4tpyXg73LZDQJ2PtT9x8htG1tWY122aa!869187422!1308677666322

这些感叹号是什么,后面是什么,特别是第二对:!1308677666322?看起来有时服务器会附加它,有时它不会。如果我第二次使用同一个浏览器登录我的应用程序,我相信 weblogic 会附加它。这个cookie有什么关系吗?

4

2 回答 2

23

查看我自己的应用程序中随机生成的一些 Weblogic JSessionID

BrYx4hyPZ4VSP9Wo4eU0OrqmhXMLFONbRHnpLFwRKZ9MSaf6wvYj!-314662473

BrYiFED29itaC4EBpWYM8RKVQQauHkvnTsA2OAKUPZXVc9oUD5fB!-784323496.

现在,如果您注意到第一个之后的会话 id 部分314662473784323496

这个数字是Weblogic 提供给正在运行的 JVM 即正在运行的 Weblogic 服务器的唯一标识符。

如果您的应用程序中有多个服务器,Weblogic 知道如何使用作为会话 ID 一部分的 9 位 JVM 编号将您的会话路由回正确的服务器。

每次重新启动 weblogic 服务器时,它都会生成一个新的 JVM id,并在该 weblogic 服务器运行时使用它。因此,对该服务器的任何点击都将在会话 ID 结束时具有相同的 ID。

会话 ID的格式为:

JSESSIONID=SESSION_ID!PRIMARY_JVMID_HASH!SECONDARY_JVM_HASH!CREATION_TIME

因此,如果主服务器不可用,它将尝试跳转到辅助服务器,并且如果您启用了会话复制- 那么会话数据可以恢复。如果您在本地只运行一个服务器,那么格式很简单

JSESSIONID=SESSION_ID!PRIMARY_JVMID_HASH!CREATION_TIME

关于某些时候它没有出现,我已经看到它通常取决于浏览器是否在地址栏中显示 sessionid

于 2011-06-22T10:36:58.710 回答
0

WebLogic Server 使用这些 ID 来维护 WebLogic Cluster In-Memory Replication 模型中的 HTTP Session Affinity。

对于启用了 HTTP 会话复制(在 weblogic.xml 部署描述符中并默认禁用)的那些 Web 应用程序,WebLogic 将在集群中保留 HTTP 会话的主副本和备份副本。

为了避免集群开销,WebLogic 代理插件(部署在您的 Web 层中)解析会话 cookie 并将每个请求重定向到托管您的主副本的 WLS。如果托管主会话的托管服务器出现故障或开销,代理插件会将请求重定向到您的 HTTP 会话所在的实例。

代理插件将跟踪所有 WebLogic 集群成员的动态列表(JVM ID/IP:端口),以适当地重定向每个请求。

如果您的应用程序未启用内存复制功能,您的 cookie 将仅包含您的 HTTP 会话所在的 JVM ID(主副本和唯一副本)。

于 2014-06-18T15:15:59.590 回答