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 就像服务器给每个用户分配的 "临时储物柜",用户可以存放和取用自己的东西,且不会和其他人的混淆。

相关推荐
西门吹-禅19 分钟前
【sap fiori cds up error】
java·服务器·sap cap cds
stark张宇24 分钟前
Golang后端面试复盘:从Swoole到IM架构,如何支撑360w用户的实时消息推送?
后端
小码哥_常37 分钟前
从0到1:搭建Spring Boot 3企业级认证授权平台
后端
敲代码的嘎仔42 分钟前
Java后端面试——SSM框架面试题
java·面试·职场和发展·mybatis·ssm·springboot·八股
小码哥_常43 分钟前
告别扫库噩梦!Spring Boot+Redis让订单超时管理飞起来
后端
带娃的IT创业者1 小时前
WeClaw 日志分析实战:如何从海量日志中快速定位根因?
运维·python·websocket·jenkins·fastapi·架构设计·实时通信
大傻^1 小时前
Spring AI Alibaba RAG实战:基于向量存储的检索增强生成
java·人工智能·spring
大傻^1 小时前
Spring AI Alibaba 快速入门:基于通义千问的AI应用开发环境搭建
java·人工智能·后端·spring·springai·springaialibaba
伯恩bourne1 小时前
Google Guava:Java 核心工具库的卓越之选
java·开发语言·guava
小王不爱笑1321 小时前
Spring 基础核心
java