我在Glassfish 3.1.2上运行了JSF 2,EJB 3.1,CDI应用程序。我注意到jsession id总是发生变化:每次发送到服务器的请求,重新调整的页面都包含带有新jsession id的links(),即使请求已包含jsession id
我认为这不正常,但我不知道是什么原因导致这种行为。
我已配置:
<session-config>
<session-properties>
<property name="enableCookies" value="false" />
<property name="enableURLRewriting" value="true" />
</session-properties>
</session-config>
但是其他所有东西都是默认的,我没有任何奇怪的配置或自定义jsession生成的东西。 - 有人知道什么可以触发Glassfish / JSF更改sessionId吗?
示例:
应用程序有一个菜单显示在每个页面上。 jsf页面包含:
<h:link outcome="/search/search">search</h:link>
现在我描述请求和响应。请求是简单的HTTP GET请求。响应总是包含完整的页面。没有涉及Ajax。
经过一些基本身份验证后。
用户进入开始页面,它包含一个带有搜索页面链接的菜单,此链接有jsession id(所有其他链接都有相同的jsessionId) - 详细信息;
http://localhost:8080/myApp/start/start.xhtml
<a href="/myApp/search/search.xhtml;jsessionid=8df431e2275052cf2348a4cb793e">search</a>
用户点击该链接;返回的页面再次包含菜单,但现在所有链接都有另一个sessionjd - Details:
http://localhost:8080/myApp/suche/teilnehmer_suche.xhtml;jsessionid=8df431e2275052cf2348a4cb793e
<a href="/myApp/search/search.xhtml;jsessionid=8ebeefb6df144a2fee97d87a51e6">...
用户再次点击该链接:jsession id再次更改
http://localhost:8080/myApp/suche/teilnehmer_suche.xhtml;jsessionid=8df431e2275052cf2348a4cb793e
<a href="/myApp/search/search.xhtml;jsessionid=8f4021c2fa628ce3b9c12c545cc4">...
我可以一次又一次地点击该链接(以及所有其他链接),但每次都会更改jsession id。
更奇怪:在更改配置以使用cookie而不是urlRewriting后,我发现即使对于资源文件也会发生此行为:
客户端请求start.xml没有jsession id,服务器在响应头中返回Set-Cookie JSESSIONID=a68d3d9260d7ea5fd36a7713eb80; Path=/myapp; HttpOnly
。
之后客户端请求带有Cookie JSESSIONID=a68d3d9260d7ea5fd36a7713eb80
的css页面,服务器发送回css文件,但响应头包含一个新的会话ID:Set-Cookie JSESSIONID=a68d550e5093e246b01ba4220cd3; Path=/myapp; HttpOnly