我的网络应用程序在URL中传递jsessionid,而在其他浏览器和机器中使用cookie基本会话管理是所需的行为。
要解决此问题,我从语言环境存储中删除了存储的cookie和jsessionid,然后开始使用cookie基本会话管理而不是URL重写。
有人可以解释为什么会发生这种情况,存储cookie和jsessionid停止应用程序以使用cookie库管理。我只需要在应用程序中使用cookie基本会话管理我是如何做到的。
环境:
Chrome浏览器,Struts 2,Tomcat 7,Java 8
提前感谢。
答案 0 :(得分:1)
jsessionid
是Java应用程序/ Web服务器用于跟踪用户会话的特殊cookie(用于识别用户是旧用户,例如已登录的用户)。对于服务器的第一个请求,浏览器不会发送任何cookie。因此,服务器不知道客户端是否支持cookie。对于此服务器,在cookie和URL(URL重写)中发送jsessionid
。但是对于下一个请求,cookie将可用(从之前的请求浏览器将存储服务器发送的cookie,并且对于相同的上下文,它现在知道已经有cookie,所以发送它)。这就是为什么对于下一个请求,您在URL中看不到jsessionid
。要强制服务器仅使用基于COOKIE的跟踪,您需要在web.xml
<session-config>
<!-- Only cookie based tracking -->
<tracking-mode>COOKIE</tracking-mode>
</session-config>