【问题标题】:What is the purpose of a JSESSIONID suffix?JSESSIONID 后缀的目的是什么?
【发布时间】:2015-01-09 00:43:09
【问题描述】:

在使用浏览器对我的服务进行身份验证后,我找到了一个包含以下键\值对的 cookie:

JSESSIONID=40d4b01c47ddb858718291d319a1a817d3037fdc6f2c341c195a94dc6ee8e8a1.e38Lb3qTb3aKai0RbxeMahqNbN90; path=/MyService; secure

注意后缀(即在“.”之后:e34Mc3uLa3yPbO0La3aNa3eTc38Ke0

当我使用 Java servetl 的 API 获取会话 id (javax.servlet.http.HttpSession.getId()) 时,我得到以下值

40d4b01c47ddb858718291d319a1a817d3037fdc6f2c341c195a94dc6ee8e8a1

这与我刚才提到的cookie变量值的第一部分相同!

我曾经尝试在 ColdFusion (CF) 上维护多个 HTTP 请求之间的会话(如果您不知道 CF 是什么也没关系,它只是一个开发应用程序的平台),如果我无法维护会话将 cookie 变量 JSESSIONID 设置为我在这个问题开头提到的整个值。为了正确维护会话,我必须发送会话 ID 的第一部分(即在“。”之前)

所以我的问题是,为什么 servlet API 会返回 JSESSIONID 的一部分,而从服务器返回的 cookie 值有后缀?这个后缀 com 来自哪里,它的目的是什么?

【问题讨论】:

    标签: session cookies httpsession jsessionid


    【解决方案1】:

    例如,后缀可以是服务器的主机名。或者它可能是一个随机值。它的生成、配置和含义取决于所使用的应用服务器,因为它不是 servlet 规范的一部分。

    在非集群设置中确保会话实际上属于服务器非常有用。想象一下具有粘性会话和服务器故障的负载平衡设置。请求现在被定向到另一台服务器。理论上,该服务器也可以有一个具有相同会话 ID 的会话。然后用户将进入不属于他的会话。附加服务器唯一后缀使应用程序服务器无法恢复不是在同一服务器中创建的会话。

    您可以在这里了解这一点:https://developer.jboss.org/message/879684,其中讨论了 jboss 7 和 wildfly 8.1 之间这种行为的差异。

    【讨论】:

      猜你喜欢
      • 2012-10-27
      • 1970-01-01
      • 2014-08-04
      • 2022-08-10
      • 2014-01-19
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      相关资源
      最近更新 更多