我正在使用shiro进行会话管理。当我在服务器端获得sessionID时,它是这样的:
node0sicwaberf0z59o8qpehfpasf6
但是,当我在浏览器中检查JSESSIONID时,此值将保存为:
node0sicwaberf0z59o8qpehfpasf6.node0
这究竟是什么.node0以及为什么这会附加到sessionID
的末尾值得一提的是,我使用jetty 9作为我的网络服务器。
答案 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。
答案 1 :(得分:1)
Jetty会话ID(9.3及更高版本)的格式为工作人员名称(例如,node0),随机生成的唯一ID(例如,123x0dsf)和.worker名称(例如,.node0)(根据org.eclipse.jetty.server.session.DefaultSessionIdManager
)。
选中DefaultSessionIdManager#renewSessionId
和DefaultSessionIdManager#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>
答案 3 :(得分:0)
这是一个jetty会话ID,你可以在这里阅读更多信息: http://jetty.4.x6.nabble.com/Some-questions-regarding-upgrade-9-3-gt-9-4-td4966096.html