java - 应用程序服务器如何跟踪 HttpSession 对象和客户端?

标签 java jakarta-ee servlets httpsession

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

背景

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

最佳答案

I doubt it's cookies

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

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

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

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

另见

关于java - 应用程序服务器如何跟踪 HttpSession 对象和客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12238969/

相关文章:

java - 即使在 WebServlet 注释中指定 "loadonstartup"元素之后,Tomcat 也不会选择 servlet

java - 如何从 Java 文本文件中解析像 "1.8400e-016"这样的数字?

jakarta-ee - 什么是网络中的骨架?

jsp - 使用jSTL访问url参数

java - 绕过多重继承限制的正确方法是什么?

Java 套接字客户端模式

jakarta-ee - 从一台服务器到多台可配置服务器的 JNDI 查找

jakarta-ee - Gradle -耳任务

java - 如何重用 HttpUrlConnection?

java - Servlet 和同步