1

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

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

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

然后它说与何时将会话视为new

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

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

我的意思是,如果我不使用我的 Web 应用程序(或 URL 重写)中的 cookie,并且我有以下内容:

  1. 从 IP A POST 到服务器
  2. 200 OK 从服务器到 A
  3. 从 IP A POST 到服务器

在第 3 步中将session.isNew()返回 true 还是 false?从文档中我不清楚。
它会返回 false(即会话不是新会话)并且我必须调用session.invalidate()才能创建新会话?
这让我更加困惑的原因是因为我正在调试一段代码,其中客户端是 HTTP 应用程序而不是 Web 浏览器,我看到在第 3 步中,尽管服务器代码中没有 cookie 或 url 重写,但session.isNew()没有返回true.
所以我无法弄清楚引擎盖下发生了什么。
任何可以帮助理解这一点的信息?

4

1 回答 1

3

这是会话跟踪的一个很好的例子

Client has joined the session表示客户端发出后续请求并包含会话 ID,您的网络服务器可以识别该会话 ID。如果启用了 cookie -jsessionid将与 cookie 一起传递,否则 - 它应该包含在 URL 本身中 - 像这样http://localhost:8080/bookstore1/cashier;jsessionid=c0o7fszeb1

在来自核心标签库的 JSPc:url中,将为您处理 URL 重写。

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

例子:

  1. 从 IP A POST 到服务器
  2. 200 OK 从服务器到 A
  3. Asession id从响应中获得
  4. 从 IP A POST 到服务器并包括获得的session id

更新:

考虑阅读一篇很棒的文章—— “基于 Web 的会话管理:管理基于 HTTP 的客户端会话的最佳实践”。 它是对如何模拟 HTTP 会话并且不依赖于 Java 的一般概述。

于 2012-01-13T07:38:15.413 回答