【问题标题】:weblogic jsessionidweblogic jsessionid
【发布时间】:2011-09-19 18:35:57
【问题描述】:

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

BBp9TAACMTglQ2TDFAKR4tpyXg73LZDQJ2PtT9x8htG1tWY122aa!869187422!1308677666322

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

【问题讨论】:

标签: weblogic sessionid jsessionid


【解决方案1】:

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

BrYx4hyPZ4VSP9Wo4eU0OrqmhXMLFONbRHnpLFwRKZ9MSaf6wvYj!-314662473

BrYiFED29itaC4EBpWYM8RKVQQauHkvnTsA2OAKUPZXVc9oUD5fB!-784323496.

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

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

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

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

format of the session ID 是:

JSESSIONID=SESSION_ID!PRIMARY_JVMID_HASH!SECONDARY_JVM_HASH!CREATION_TIME

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

JSESSIONID=SESSION_ID!PRIMARY_JVMID_HASH!CREATION_TIME

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

【讨论】:

    【解决方案2】:

    WebLogic Server 使用这些 ID 来维护 WebLogic Cluster In-Memory Replication 模型中的 HTTP 会话关联性。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-11
      • 2014-11-08
      • 2014-08-01
      • 2020-03-09
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 2016-09-10
      相关资源
      最近更新 更多