6

我有一个在 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 请求。响应总是包含完整的页面。不涉及阿贾克斯。

  1. 经过一些基本身份验证。

  2. 用户进入起始页面,它包含一个菜单,其中包含一个指向搜索页面的链接,并且该链接具有 jsession id(所有其他链接具有相同的 jsessionId) - 详细信息;

    • 要求:http://localhost:8080/myApp/start/start.xhtml
    • 回复内容:<a href="/myApp/search/search.xhtml;jsessionid=8df431e2275052cf2348a4cb793e">search</a>
  3. 用户点击该链接;返回的页面再次包含菜单,但现在所有链接都有另一个 sessionjd - 详细信息:

    • 要求http://localhost:8080/myApp/suche/teilnehmer_suche.xhtml;jsessionid=8df431e2275052cf2348a4cb793e
    • 回复内容:<a href="/myApp/search/search.xhtml;jsessionid=8ebeefb6df144a2fee97d87a51e6">...
  4. 用户再次单击该链接: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

4

0 回答 0