我有一个在 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 请求。响应总是包含完整的页面。不涉及阿贾克斯。
经过一些基本身份验证。
用户进入起始页面,它包含一个菜单,其中包含一个指向搜索页面的链接,并且该链接具有 jsession id(所有其他链接具有相同的 jsessionId) - 详细信息;
- 要求:
http://localhost:8080/myApp/start/start.xhtml
- 回复内容:
<a href="/myApp/search/search.xhtml;jsessionid=8df431e2275052cf2348a4cb793e">search</a>
- 要求:
用户点击该链接;返回的页面再次包含菜单,但现在所有链接都有另一个 sessionjd - 详细信息:
- 要求
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
在响应头中返回。
之后客户端请求css页面,Cookie JSESSIONID=a68d3d9260d7ea5fd36a7713eb80
服务器发回css文件,但响应头包含一个新的会话ID:Set-Cookie JSESSIONID=a68d550e5093e246b01ba4220cd3; Path=/myapp; HttpOnly