编程自学指南:java程序设计开发,Session 对象详解, Session 的核心作用与生命周期, Session 的创建、访问、销毁方法

编程自学指南:java程序设计开发,Session 对象详解

一、课程信息

学习目标

  1. 理解 Session 的核心作用生命周期
  2. 掌握 Session 的创建、访问、销毁方法
  3. 能在项目中运用 Session 实现状态保持
  4. 理解 Session 与 Cookie、Filter 的协作关系

二、课程导入:生活中的 Session

🌰 超市储物柜类比

  • Session 就像超市的储物柜:
    1. 存包时获取一张带二维码的小票(Session ID)
    2. 凭小票可在任意时间取包(跨请求访问数据)
    3. 小票过期或丢失后无法取包(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 域实验

任务

  1. 在 A.jsp 中向 Session 存入数据
  2. 在 B.jsp 中读取该数据
  3. 关闭浏览器后再次访问 B.jsp,观察结果

练习 2:Session 计数器

任务

  1. 使用 Session 记录用户访问次数
  2. 每次访问页面时显示:您已访问本页面 3 次

九、课程总结

知识图谱:

Session 对象  
   ↳ 生命周期:创建→访问→销毁  
   ↳ 核心方法:  
      ✅ getSession() 创建/获取  
      ✅ setAttribute() 存储数据  
      ✅ invalidate() 销毁  
   ↳ 典型应用:  
      ✅ 登录状态保持  
      ✅ 购物车功能  

口诀记忆:

“Session 是会话,服务器端存数据,
getSession 来创建,setAttribute 存进去,
invalidate 销毁快,登录购物用起来,
权限控制 Filter 配,状态保持真自在!”

十、课后作业

必做 1:在线考试系统

要求

  1. 使用 Session 记录用户答题状态
  2. 支持暂停考试、继续考试功能

必做 2:Session 加密存储

任务

  1. 对 Session 中的用户信息进行加密
  2. 使用 AES 算法实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值