【发布时间】:2015-05-04 14:38:27
【问题描述】:
这是一个很好的补救问题。我以前没有使用过HttpSession 类。我正在阅读this tutorial,我看到会话是HttpServletRequest 的属性。
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// get current session, or initialise one if none
HttpSession sess = req.getSession(true);
}
我的问题是,会话如何存储?在客户端?过去我习惯于存储会话服务器/数据库端。这是如何运作的?如果我根据给定请求更新会话,这是否会始终反映在后续调用中?会话是否存储在客户端上?
【问题讨论】:
-
Session 不存储在客户端,而是一个
session key唯一标识服务器端的会话数据。 “关键”数据通常使用 cookie 或请求标头存储在客户端。 -
那么在教程中他们如何从这个方法调用中获取数据呢? ` String username = req.getParameter("username");`
-
在通过 HTTP/HTTPS 消息发送纯文本之前,您的服务器/容器将在
server side上执行此语句。所以你的server知道将特定请求与哪个会话相关联。它是服务器标准的一部分。 -
@DavidWilliams 这与会话无关,这是一个请求参数。
-
如果是无状态会话,您需要将会话详细信息存储在数据库中。如果它是一个有状态的会话,您可以通过将会话存储在 HttpSession 中并将其存储在浏览器 cookie 中来处理,然后针对每个操作进行比较。