无法理解会话对象的行为

时间:2012-01-13 07:23:17

标签: java session java-ee session-management

我对javax.servlet.http.HttpSession的文件感到困惑 它说:

  

会话用于维护多个州的状态和用户身份   页面请求。可以使用cookie或者来维护会话   通过URL重写。

现在,cookie和URL重写都由服务器中的应用程序代码(即我们的代码)处理。

然后它说明会话何时被视为new

  

服务器认为会话是新的,直到它被加入   客户端。在客户端加入会话之前,使用isNew方法   返回true。值true表示以下三种情况之一:
      1.客户尚未了解会议情况       2.会议尚未开始       3.客户选择不加入会话。如果客户端仅支持cookie并选择拒绝任何cookie,则会发生这种情况   由服务器发送。如果服务器支持URL重写,则为这种情况   不会经常发生。

我不清楚何时考虑/意味着client has joined the session

我的意思是如果我不使用来自我的网络应用程序(或URL重写)的cookie,我有以下内容:

  1. 从IP A发送到服务器
  2. 200 OK从服务器到A
  3. 从IP A发送到服务器
  4. 在步骤3中,session.isNew()会返回true还是false?从文件中我不清楚 它会返回错误(即会话不是新的),我将不得不致电session.invalidate()以创建新会话吗? 这让我更加困惑的原因是因为我正在调试一段代码,其中客户端是HTTP应用程序而不是Web浏览器,我在步骤3中看到session.isNew()不会返回true,尽管那里服务器代码中没有cookie或URL重写。
    所以我无法弄清楚引擎盖下会发生什么 任何有助于理解这一点的信息?

1 个答案:

答案 0 :(得分:3)

以下是Session Tracking

的一个很好的例子

Client has joined the session表示客户端发出后续请求并包含会话ID,您的网络服务器可以识别该ID。如果启用了Cookie,则jsessionid将通过Cookie传递,否则 - 应包含在网址中 - 如此http://localhost:8080/bookstore1/cashier;jsessionid=c0o7fszeb1

来自Core Tag Library的JSP c:url将为您处理URL重写。

在B2B通信的情况下,您必须自己获取会话ID并手动将其包含在后续请求中。

示例:

  1. 从IP A发送到服务器
  2. 200 OK从服务器到A
  3. A从回复中获取session id
  4. 从IP A发布到服务器并包含获得的session id
  5. <强>更新

    考虑阅读一篇好文章 - "Web Based Session Management: Best practices in managing HTTP-based client sessions."这是对如何模拟HTTP会话以及与Java无关的概述。