【问题标题】:How do application servers keep track of HttpSession objects and clients?应用程序服务器如何跟踪 HttpSession 对象和客户端?
【发布时间】:2012-09-03 03:18:59
【问题描述】:

应用程序服务器如何跟踪哪个客户端与哪个 HttpSession 对象相关联?是否与跟踪客户端之间的 TCP/IP 连接有关?或者饼干?我怀疑它是 cookie,因为有一种单独的方法可以提取 cookie。

背景

我了解 servlet 和 JSP 可以调用 request.getSession() 来获取与客户端关联的 HttpSession 对象。我很好奇当客户端请求新页面时服务器如何知道返回相同的对象。我四处搜索,我找到的所有文档都是关于如何提取会话信息的。我感兴趣的是服务器如何将会话信息与它可以访问的大量客户端数据隔离开来。

【问题讨论】:

标签: java jakarta-ee servlets httpsession


【解决方案1】:

我怀疑是 cookie

是的!在无状态 HTTP 协议和 servlet 中,基本上有两种方法可以跟踪用户会话:JSESSIONID cookie 或 URL 重写。后者在 cookie 不可用时使用。

使用第一个响应 servlet 容器在客户端设置以下 cookie:

Set-Cookie: JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C; Path=/; HttpOnly

每个后续请求都包含这个 cookie,servlet 容器使用它来提供正确的HttpSession。您可以使用 servlet API 直接访问此 cookie,甚至可以在 JSESSIONID 或其他一些 cookie 之上构建自己的会话机制。但是 servlet 容器会为您做到这一点。

另见

【讨论】:

  • URL 重写是您启用的可以添加到所有 URL 的东西,还是您需要手动附加它并从请求中解析它?我从未使用过检票口,但如果我理解正确,它正在处理 URL 重写?
  • 一个自尊的 MVC 框架会为此提供一个标签。例如,JSF 为此提供了<h:link>。在“plain vanilla JSP”中,您需要 JSTL 的<c:url>
猜你喜欢
  • 1970-01-01
  • 2018-07-24
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多