Skip to content

J2EE_007_Session&Cookie.md

1. 概念与区别

1.1 Session(会话)

  • 定义
    Session 是一种服务器端的技术,用于跟踪和存储用户在多个页面之间的交互信息。它类似于临时的“记忆”功能。

  • 特点

    • 存储位置:服务器端。
    • 生命周期:从创建到失效或关闭期间有效。
    • 数据大小:可以存储较大的数据量。
  • 定义
    Cookie 是一种客户端技术,用于在用户浏览器中存储少量信息。它可以帮助网站记住用户的偏好设置和身份验证信息。

  • 特点

    • 存储位置:客户端(浏览器)。
    • 生命周期:可以是临时的或持久性的,具体取决于设置。
    • 数据大小:容量有限,通常为4KB左右。

1.3 区别

特性SessionCookie
存储位置服务器端客户端(浏览器)
生命周期请求之间,直到失效或关闭根据设置,可以是临时的或持久性的
数据大小较大较小
使用场景跟踪用户状态、存储会话数据记住用户偏好、身份验证等

2. Session 的使用

2.1 创建和获取 Session

在 Java Servlet 中,可以通过 HttpServletRequest 对象获取当前的 Session。

示例代码:

java
// 获取当前Session(如果不存在则创建新的)
HttpSession session = request.getSession();

// 如果需要检查是否存在会话
if (session isNew) {
    // 处理新会话逻辑
}

2.2 存储和读取数据

在 Session 中存储和检索数据使用 setAttribute()getAttribute() 方法。

示例代码:

java
// 存储用户信息到Session中
session.setAttribute("username", "张三");

// 从Session中获取用户信息
String username = (String) session.getAttribute("username");

2.3 设置 Session 的有效时间

可以通过 setMaxInactiveInterval() 方法设置会话的超时时间(以秒为单位)。

示例代码:

java
session.setMaxInactiveInterval(1800); // 半小时后过期

2.4 终止 Session

调用 invalidate() 方法可以手动终止当前会话,并清除所有相关数据。

示例代码:

java
// 结束当前Session并删除其存储的数据
session.invalidate();