我在本地运行Weblogic 10.3,并对它生成的sessionId有疑问。当我打印session.getId()时,我看到类似于此的东西:
BBp9TAACMTglQ2TDFAKR4tpyXg73LZDQJ2PtT9x8htG1tWY122aa!869187422!1308677666322
这些惊叹号及其后面是什么,特别是第二对:!1308677666322?看起来有时服务器会附加它,有时却不会。我相信如果我使用相同的浏览器第二次登录我的应用程序,weblogic会附加它。这个cookie是以某种方式相关的吗?
答案 0 :(得分:22)
从我自己的应用程序中查看一些随机生成的Weblogic JSessionID
BrYx4hyPZ4VSP9Wo4eU0OrqmhXMLFONbRHnpLFwRKZ9MSaf6wvYj!-314662473
和
BrYiFED29itaC4EBpWYM8RKVQQauHkvnTsA2OAKUPZXVc9oUD5fB!-784323496.
现在,如果您注意到会话ID 在第一个之后,即314662473
和784323496
。
此编号是Weblogic为正在运行的JVM(即正在运行的Weblogic服务器)提供的唯一标识符。
如果您的应用程序中有多个服务器,Weblogic知道如何使用这个9位JVM编号将会话路由回正确的服务器,该编号是会话ID的一部分。
每次重新启动weblogic服务器时,只要该weblogic服务器正在运行,它就会生成一个新的JVM id并使用它。因此,对该服务器的任何命中都将在会话ID的末尾具有相同的ID。
JSESSIONID = SESSION_ID!PRIMARY_JVMID_HASH!SECONDARY_JVM_HASH!CREATION_TIME
因此,如果主服务器不可用,它将尝试跳转到辅助服务器和(如果已启用会话复制) - 然后可以恢复会话数据。 如果您在本地上只运行一台服务器,那么格式就是
JSESSIONID = SESSION_ID!PRIMARY_JVMID_HASH!CREATION_TIME
有些时候它没有出现,我看到它通常是一个浏览器依赖于sessionid是否显示在地址栏中
答案 1 :(得分:0)
WebLogic Server使用这些ID在WebLogic群集内存中复制模型中维护HTTP会话关联。
对于启用了HTTP会话复制的Web应用程序(在weblogic.xml部署描述符中并默认禁用),WebLogic将保留HTTP会话的主要和备份副本。
为了避免群集开销,WebLogic代理插件(部署在Web层层中)解析会话cookie并将每个请求重定向到托管主副本的WLS。如果托管主会话的受管服务器出现故障或开销,则Proxy Plug-In会将请求重定向到HTTP会话所在的实例。
代理插件将跟踪所有WebLogic群集成员的动态列表(JVM ID / IP:端口),以便适当地重定向每个请求。
如果您的应用未启用内存中复制功能,则您的Cookie将仅包含HTTP Sesion所在的JVM ID(主要副本和唯一副本)。