JSESSIONID cookie有' .node0'后缀,而服务器端sessionID不是

时间:2017-10-08 09:37:28

标签: java cookies jetty shiro

我正在使用shiro进行会话管理。当我在服务器端获得sessionID时,它是这样的:

node0sicwaberf0z59o8qpehfpasf6

但是,当我在浏览器中检查JSESSIONID时,此值将保存为:

node0sicwaberf0z59o8qpehfpasf6.node0

这究竟是什么.node0以及为什么这会附加到sessionID

的末尾

值得一提的是,我使用jetty 9作为我的网络服务器。

4 个答案:

答案 0 :(得分:2)

会话管理在Jetty 9.4中得到了重大改进。 当我将码头从9.3.25.x升级到9.4.15.x时,我遇到了同样的问题。由于在JSESSIONID中添加了工作人员名称,因此在我的应用程序中,在Jetty之外发生的某些标头验证开始失败。 因为我只有一个码头节点,所以我选择从会话ID中删除节点ID。 我通过向.node添加以下行来删除了start.ini后缀

jetty.sessionIdManager.workerName=
etc/sessions/id-manager.xml

默认情况下,Jetty 9.4.x将在启动时使用默认设置实例化DefaultSessionIdManager和HouseKeeper的单个实例。以上配置将覆盖默认配置中的workerName。

Reference

答案 1 :(得分:1)

Jetty会话ID(9.3及更高版本)的格式为工作人员名称(例如,node0),随机生成的唯一ID(例如,123x0dsf)和.worker名称(例如,.node0)(根据org.eclipse.jetty.server.session.DefaultSessionIdManager)。

选中DefaultSessionIdManager#renewSessionIdDefaultSessionIdManager#getExtendedId

答案 2 :(得分:1)

我知道已经晚了,但也许会对别人有帮助。

我正在使用maven-jetty-plugin(9.4.6.v20170531),最终遇到类似的问题-Session.getId()返回一个值,但是ServletContainer将JSESSIONID cookie设置为value+'.node0'

我不以任何方式使用群集,也完全没有配置。这是码头服务器的默认行为。

我设法通过向.node添加以下行来删除jetty-env.xml后缀:

<Get name="sessionHandler">
  <Call name="getServer" id="srv"></Call>
  <Set name="sessionIdManager">
    <New class="org.eclipse.jetty.server.session.DefaultSessionIdManager">
        <Arg><Ref refid="srv" /></Arg> 
        <Set name="workerName" type="String"></Set>
    </New>
  </Set>
</Get>

这里与source code of DefaultSessionIdManager相关

答案 3 :(得分:0)

这是一个jetty会话ID,你可以在这里阅读更多信息: http://jetty.4.x6.nabble.com/Some-questions-regarding-upgrade-9-3-gt-9-4-td4966096.html