JSESSIONID后缀的目的是什么?

时间:2014-11-12 08:25:21

标签: session cookies httpsession jsessionid

使用浏览器对我的服务进行身份验证后,我找到了一个包含以下key \ value对的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值有后缀?这个后缀来自何处以及它的目的是什么?

1 个答案:

答案 0 :(得分:1)

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

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

你可以在这里了解这个:https://developer.jboss.org/message/879684讨论jboss 7和wildfly 8.1之间的这种行为的差异。