导致JSessionID随每个请求而变化的原因是什么?

时间:2012-08-14 21:23:36

标签: java jsf java-ee glassfish ejb

我在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。

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

  2. 用户进入开始页面,它包含一个带有搜索页面链接的菜单,此链接有jsession id(所有其他链接都有相同的jsessionId) - 详细信息;

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

    • 请求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">...
  5. 我可以一次又一次地点击该链接(以及所有其他链接),但每次都会更改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

0 个答案:

没有答案