Skip to content

深入理解Session机制及其使用方法

Published:  at  03:34 AM

Session

Session 概念

Session 是一种服务器端会话技术,用于在同一次会话(一次对话)中的多次请求之间共享数据
数据存储在服务器端的 HttpSession 对象中,与具体客户端会话一一对应。


Session 的基本使用

1. 获取 HttpSession 对象

HttpSession session = request.getSession();

2. 使用 HttpSession 存取数据

// 存储数据
session.setAttribute("msg", "hello_world");

// 获取数据
Object msg = session.getAttribute("msg");

// 移除数据
session.removeAttribute("msg");

Session 中存储的数据以 键值对 的形式存在,作用域为一次会话。


Session 工作原理

Session 的实现依赖于 Cookie

基本流程如下:

  1. 客户端第一次请求服务器时:

    • 服务器创建一个 HttpSession 对象
    • 同时生成一个唯一的 Session ID
  2. 服务器将该 Session ID 写入名为 JSESSIONID 的 Cookie 中,并通过响应返回给客户端

  3. 客户端后续请求时:

    • 浏览器自动携带 JSESSIONID Cookie
  4. 服务器根据 Cookie 中的 Session ID:

    • 找到对应的 Session 对象
    • 从中读取或写入会话数据

Session 使用注意事项

1. 客户端关闭的影响

服务器未关闭的情况下:


可以通过手动创建同名 Cookie,使 Session ID 持久化:

HttpSession session = request.getSession();

Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60 * 60); // 1 小时
response.addCookie(cookie);

session.setAttribute("msg", "hello_world");

这样即使关闭浏览器,只要 Cookie 未失效,仍可继续访问原 Session。


3. 服务器重启与 Session 钝化 / 活化

在服务器正常关闭的情况下:

该机制用于减少服务器重启导致的会话数据丢失。


4. Session 被销毁的常见情况


Session 的特点

  1. 用于一次会话中多次请求之间的数据共享
  2. 数据存储在服务器端
  3. 可以存储任意 Java 对象
  4. 理论上存储大小不受严格限制(受服务器内存约束)

对比项SessionCookie
数据存储位置服务器端客户端
数据类型限制仅字符串
数据大小限制较大(受内存限制)较小
安全性较高相对较低
生命周期控制服务器控制客户端控制

Suggest Changes

Previous Post
深入理解MVC架构的优缺点及应用
Next Post
JSP技术详解及其运行机制