Session

在 Web 开发中,session(会话)是服务器为每个客户端(通常是浏览器)创建的一个临时存储区域,用于在多个请求之间保存用户的状态信息。

因为 HTTP 协议是无状态 的(每次请求都是独立的,服务器默认不会记住之前的请求),而 session 就是解决这个问题的机制,让服务器能识别 "同一个用户" 的多次请求。

为什么需要 session?

比如用户登录后,后续操作(如添加购物车、提交订单)都需要知道 "当前是哪个用户在操作",这时候就可以用 session 存储用户的登录状态。

session 的基本用法(以 Java 为例)

1、获取 session 对象

在 Controller 方法中直接声明 HttpSession 类型的参数,Spring MVC 会自动注入当前用户的 session 对象:

复制代码
@GetMapping("/test")
public String test(HttpSession session) {
    // 使用 session...
    return "test";
}

2、存储数据到 session

setAttribute(String key, Object value) 方法存储键值对:

复制代码
// 存储用户ID到session
session.setAttribute("userId", 123);
// 存储用户名到session
session.setAttribute("username", "张三");

3、从 session 中获取数据

getAttribute(String key) 方法获取,返回值是 Object 类型,需要强转:

复制代码
// 获取用户ID
Integer userId = (Integer) session.getAttribute("userId");
// 获取用户名
String username = (String) session.getAttribute("username");

4、删除 session 中的数据

removeAttribute(String key) 方法:

复制代码
// 移除用户名
session.removeAttribute("username");

5、设置 session 有效期

默认有效期一般是 30 分钟(不同服务器可能不同),可以手动设置:

复制代码
// 设置有效期为 60 秒(1分钟)
session.setMaxInactiveInterval(60); 

6、销毁 session

通常在用户退出登录时调用:

复制代码
session.invalidate(); // 销毁当前session,清除所有数据

session 的工作原理

  1. 客户端第一次请求服务器时,服务器创建一个 session,并生成一个唯一的 sessionId(类似一个随机字符串)。
  2. 服务器把 sessionId 通过 Cookie 发送给客户端(浏览器会自动保存)。
  3. 后续客户端的每次请求,都会自动带上这个 sessionId,服务器通过它找到对应的 session 对象,从而识别用户。

注意事项

  • session 存储在服务器内存中(或分布式缓存中),不要存太多数据,以免占用资源。
  • 不同用户的 session 是完全隔离的,彼此不能访问对方的数据。
  • 如果客户端禁用了 Cookie,服务器会通过 URL 重写 (在 URL 后拼接 sessionId)来传递会话标识,但这种方式不太安全,一般不常用。

简单说,session 就像服务器给每个用户分配的 "临时储物柜",用户可以存放和取用自己的东西,且不会和其他人的混淆。

相关推荐
小马爱打代码14 小时前
Spring Boot:模块化实战 - 保持清晰架构
java·spring boot·架构
青青草原技术员灰太狼15 小时前
Nginx的https搭建
linux·服务器·网络
小坏讲微服务15 小时前
SpringBoot4.0整合knife4j 在线文档完整使用
java·spring cloud·在线文档·knife4j·文档·接口文档·swagger-ui
8***Z8915 小时前
springboot 异步操作
java·spring boot·mybatis
宇钶宇夕15 小时前
三旺 INP314T 网关快速入门指南:从登录到基础配置
运维·自动化·软件工程
i***132415 小时前
Spring BOOT 启动参数
java·spring boot·后端
坚持不懈的大白15 小时前
后端:SpringMVC
java
IT_Octopus15 小时前
(旧)Spring Securit 实现JWT token认证(多平台登录&部分鉴权)
java·后端·spring
kk哥889915 小时前
Spring详解
java·后端·spring
S***267515 小时前
Spring Cloud Gateway 整合Spring Security
java·后端·spring