Session 原理及在 Java Web 中的应用与注意事项
在 Web 开发中,HTTP 协议是无状态的,这意味着每次请求之间没有关联。为了实现用户登录、购物车、权限控制等功能,服务器需要一种机制来'记住'用户。Session(会话) 就是解决这一问题的核心技术之一。
什么是 Session?
1.1 基本定义
Session(会话) 是服务器端用于保存用户状态的一种机制。当用户访问服务器时,服务器为其创建一个唯一的会话(Session),并在内存或存储中保存该用户的相关信息(如登录状态、用户 ID 等)。
每个 Session 都有一个唯一的 Session ID,通常通过 Cookie 发送给客户端,后续请求中客户端携带该 ID,服务器据此识别用户。想象 Session 就像超市给你的会员卡,第一次访问时服务器给你生成一张唯一的'会员卡'(Session ID),以后每次访问你都出示这张卡,服务器就能通过卡片识别你的身份和之前的操作记录。
1.2 Session 的工作原理
Session 的工作流程可以分为四个阶段:
- 创建阶段:当用户第一次访问服务器时,服务器会生成一个唯一的 Session ID,并创建对应的 Session 对象存储用户数据。
- 传输阶段:服务器通过 Set-Cookie 响应头,将 Session ID 发送给客户端,客户端会将其保存在 Cookie 中。
- 验证阶段:后续请求中,客户端会自动在 Cookie 中携带 Session ID,服务器通过这个 ID 找到对应的 Session 对象。
- 销毁阶段:当用户登出或会话超时后,服务器会删除 Session 对象,客户端 Cookie 也会被清除或标记为过期。
Session 的使用场景
- 用户登录状态保持
- 购物车信息存储
- 表单防重复提交
- 一次性验证码(如短信验证码)
- 权限控制与访问记录
Java Web 中使用 Session(原生 Servlet)
3.1 获取或创建 Session
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
String username = req.getParameter("username");
// 获取或创建 Session
HttpSession session = req.getSession();
// 存储用户信息
session.setAttribute(, username);
session.setAttribute(, ());
resp.getWriter().println( + username);
}
}


