应用程序服务器如何跟踪哪个客户端与哪个 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 容器会为您做这些。
另见
- > Why is jsessionid appearing in Wicket URLs when cookies are enabled? - 有关 servlet 容器如何区分 cookie 和 URL 重写的一些技术细节
关于java - 应用程序服务器如何跟踪 HttpSession 对象和客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12238969/