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

Usm*_*kil 1 java servlets java-ee httpsession

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

背景

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

Tom*_*icz 8

我怀疑它是饼干

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

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

Set-Cookie: JSESSIONID=25E7A6C27095CA1F560BCB2983BED17C; Path=/; HttpOnly
Run Code Online (Sandbox Code Playgroud)

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

也可以看看

  • 一个自尊的MVC框架将为此提供一个标签.例如,JSF为此提供了`<h:link>`.在"普通的vanilla JSP"中,你需要JSTL的`<c:url>`. (2认同)