JSESSIONID cookie 有 '.node0' 后缀,而服务器端 sessionID 没有
JSESSIONID cookie has '.node0' postfix while the server side sessionID doesn't
我正在使用 shiro 进行会话管理。当我在服务器端获取 sessionID 时,它是这样的:
node0sicwaberf0z59o8qpehfpasf6
但是,当我在浏览器中检查 JSESSIONID 时,该值保存为:
node0sicwaberf0z59o8qpehfpasf6.node0
这个 .node0 到底是什么,为什么要附加到 sessionID 的末尾
另外值得一提的是,我使用 jetty 9 作为我的网络服务器。
这是一个 Jetty 会话 ID,您可以在这里阅读更多相关信息:
http://jetty.4.x6.nabble.com/Some-questions-regarding-upgrade-9-3-gt-9-4-td4966096.html
Jetty session id (9.3 and onwards) 的格式是worker name (e.g. node0), 一个随机生成的唯一ID (e.g. 123x0dsf) 和.worker name (e.g. .node0) 根据org.eclipse.jetty.server.session.DefaultSessionIdManager
.
检查 DefaultSessionIdManager#renewSessionId
和 DefaultSessionIdManager#getExtendedId
。
我知道已经晚了,但也许它会对某些人有所帮助。
我正在使用 maven-jetty-plugin (9.4.6.v20170531),最终遇到类似的问题 - Session.getId()
returns 一个值,但 ServletContainer 实际设置了 JSESSIONID
cookie至 value+'.node0'
.
我没有以任何方式使用集群,也没有进行任何配置。这是码头服务器的默认行为。
我通过将以下行添加到 jetty-env.xml
来设法删除 .node
后缀:
<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>
Session 管理在 Jetty 9.4 中进行了重大改革。
当我将码头从 9.3.25.x 升级到 9.4.15.x 时,我遇到了同样的问题。由于在 JSESSIONID 中添加了工作人员名称,在我的应用程序中,发生在 Jetty 之外的一些 header 验证开始失败。
由于我只有一个码头节点,我选择从 session ID 中删除节点 ID。
我设法通过向 start.ini
添加以下行来删除 .node
后缀
jetty.sessionIdManager.workerName=
etc/sessions/id-manager.xml
默认情况下,Jetty 9.4.x 将在启动时使用默认设置实例化 DefaultSessionIdManager 和 HouseKeeper 的单个实例。以上配置会覆盖默认配置中的 workerName。
我正在使用 shiro 进行会话管理。当我在服务器端获取 sessionID 时,它是这样的:
node0sicwaberf0z59o8qpehfpasf6
但是,当我在浏览器中检查 JSESSIONID 时,该值保存为:
node0sicwaberf0z59o8qpehfpasf6.node0
这个 .node0 到底是什么,为什么要附加到 sessionID 的末尾
另外值得一提的是,我使用 jetty 9 作为我的网络服务器。
这是一个 Jetty 会话 ID,您可以在这里阅读更多相关信息: http://jetty.4.x6.nabble.com/Some-questions-regarding-upgrade-9-3-gt-9-4-td4966096.html
Jetty session id (9.3 and onwards) 的格式是worker name (e.g. node0), 一个随机生成的唯一ID (e.g. 123x0dsf) 和.worker name (e.g. .node0) 根据org.eclipse.jetty.server.session.DefaultSessionIdManager
.
检查 DefaultSessionIdManager#renewSessionId
和 DefaultSessionIdManager#getExtendedId
。
我知道已经晚了,但也许它会对某些人有所帮助。
我正在使用 maven-jetty-plugin (9.4.6.v20170531),最终遇到类似的问题 - Session.getId()
returns 一个值,但 ServletContainer 实际设置了 JSESSIONID
cookie至 value+'.node0'
.
我没有以任何方式使用集群,也没有进行任何配置。这是码头服务器的默认行为。
我通过将以下行添加到 jetty-env.xml
来设法删除 .node
后缀:
<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>
Session 管理在 Jetty 9.4 中进行了重大改革。
当我将码头从 9.3.25.x 升级到 9.4.15.x 时,我遇到了同样的问题。由于在 JSESSIONID 中添加了工作人员名称,在我的应用程序中,发生在 Jetty 之外的一些 header 验证开始失败。
由于我只有一个码头节点,我选择从 session ID 中删除节点 ID。
我设法通过向 start.ini
.node
后缀
jetty.sessionIdManager.workerName=
etc/sessions/id-manager.xml
默认情况下,Jetty 9.4.x 将在启动时使用默认设置实例化 DefaultSessionIdManager 和 HouseKeeper 的单个实例。以上配置会覆盖默认配置中的 workerName。