编程自学指南:java程序设计开发,Session 对象详解
一、课程信息
学习目标
- 理解 Session 的核心作用与生命周期
- 掌握 Session 的创建、访问、销毁方法
- 能在项目中运用 Session 实现状态保持
- 理解 Session 与 Cookie、Filter 的协作关系
二、课程导入:生活中的 Session
🌰 超市储物柜类比
- Session 就像超市的储物柜:
- 存包时获取一张带二维码的小票(Session ID)
- 凭小票可在任意时间取包(跨请求访问数据)
- 小票过期或丢失后无法取包(Session 超时 / 销毁)
三、Session 核心概念
🔍 1. 定义与特点
- 定义:
Session 是服务器端为每个用户创建的会话对象,用于在多次请求间保持状态 - 特点:
✅ 存储在服务器端
✅ 依赖 Cookie 或 URL 重写传递 Session ID
✅ 默认有效期 30 分钟(可配置)
🔍 2. 与 Cookie 的对比
四、Session 生命周期
🔥 1. 创建 Session
// 获取或创建 Session(第一次调用时创建)
HttpSession session = request.getSession();
// 立即创建新 Session(即使已有 Session)
HttpSession newSession = request.getSession(true);
// 不创建新 Session(返回 null)
HttpSession existingSession = request.getSession(false);
🔥 2. 访问 Session
// 存储数据
session.setAttribute("user", "john");
// 读取数据
String username = (String) session.getAttribute("user");
// 删除数据
session.removeAttribute("user");
🔥 3. 销毁 Session
// 立即销毁
session.invalidate();
// 设置超时时间(分钟)
session.setMaxInactiveInterval(10); // 10分钟后自动销毁
五、实战案例:登录状态管理
🔥 1. 登录页(login.jsp)
<form action="/login" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
🔥 2. 登录 Servlet
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
if ("admin".equals(username) && "123".equals(password)) {
// 创建 Session 并存储用户信息
HttpSession session = req.getSession();
session.setAttribute("user", username);
resp.sendRedirect("/home.jsp");
} else {
resp.sendRedirect("/login.jsp?error=1");
}
}
}
🔥 3. 主页(home.jsp)
<%
String user = (String) session.getAttribute("user");
if (user == null) {
response.sendRedirect("/login.jsp");
return;
}
%>
<h1>欢迎 <%= user %> 登录!</h1>
<a href="/logout">注销</a>
🔥 4. 注销 Servlet
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
HttpSession session = req.getSession(false);
if (session != null) {
session.invalidate(); // 销毁 Session
}
resp.sendRedirect("/login.jsp");
}
}
六、综合案例:购物车功能
🔥 1. 添加商品到购物车
@WebServlet("/addCart")
public class CartServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
String productId = req.getParameter("productId");
// 获取或创建购物车(存储在 Session)
HttpSession session = req.getSession();
List<String> cart = (List<String>) session.getAttribute("cart");
if (cart == null) {
cart = new ArrayList<>();
session.setAttribute("cart", cart);
}
cart.add(productId);
resp.sendRedirect("/cart.jsp");
}
}
🔥 2. 显示购物车(cart.jsp)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h1>购物车</h1>
<c:forEach items="${sessionScope.cart}" var="product">
${product}<br>
</c:forEach>
<a href="/clearCart">清空购物车</a>
🔥 3. 清空购物车
@WebServlet("/clearCart")
public class ClearCartServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
HttpSession session = req.getSession(false);
if (session != null) {
session.removeAttribute("cart"); // 仅移除购物车
}
resp.sendRedirect("/cart.jsp");
}
}
七、关联知识:Session 与其他技术
🔗 1. 与 Filter 的协作(权限控制)
@WebFilter("/admin/*")
public class AuthFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("user") == null) {
((HttpServletResponse) res).sendError(HttpServletResponse.SC_UNAUTHORIZED);
return;
}
chain.doFilter(req, res);
}
}
🔗 2. 与 Spring MVC 的集成
@Controller
@RequestMapping("/cart")
public class CartController {
@PostMapping("/add")
public String addToCart(@RequestParam String productId,
HttpSession session) {
List<String> cart = (List<String>) session.getAttribute("cart");
if (cart == null) {
cart = new ArrayList<>();
session.setAttribute("cart", cart);
}
cart.add(productId);
return "redirect:/cart/list";
}
}
八、课堂练习
练习 1:Session 域实验
任务:
- 在
A.jsp
中向 Session 存入数据 - 在
B.jsp
中读取该数据 - 关闭浏览器后再次访问
B.jsp
,观察结果
练习 2:Session 计数器
任务:
- 使用 Session 记录用户访问次数
- 每次访问页面时显示:
您已访问本页面 3 次
九、课程总结
知识图谱:
Session 对象
↳ 生命周期:创建→访问→销毁
↳ 核心方法:
✅ getSession() 创建/获取
✅ setAttribute() 存储数据
✅ invalidate() 销毁
↳ 典型应用:
✅ 登录状态保持
✅ 购物车功能
口诀记忆:
“Session 是会话,服务器端存数据,
getSession 来创建,setAttribute 存进去,
invalidate 销毁快,登录购物用起来,
权限控制 Filter 配,状态保持真自在!”
十、课后作业
必做 1:在线考试系统
要求:
- 使用 Session 记录用户答题状态
- 支持暂停考试、继续考试功能
必做 2:Session 加密存储
任务:
- 对 Session 中的用户信息进行加密
- 使用 AES 算法实现