当前位置: 首页 > article >正文

Session、Cookie、Token的区别

在 Web 开发中,Session、Cookie 和 Token 是三种常见的用户身份认证与状态保持机制,它们各有不同的用途和特性。

1. Session(会话)

定义

Session 是一种 服务器端 的状态管理机制,用于存储用户的会话信息。

🔹 特点

  • 存储位置:保存在服务器端,通常是内存或数据库。
  • 安全性:比 Cookie 更安全,因为数据不存储在客户端。
  • 生命周期:通常与浏览器会话(session)相关,关闭浏览器可能会丢失,或者由服务器控制失效时间。
  • 依赖 Cookie:默认使用 Cookie 存储 SessionID,通过 SessionID 关联服务器端的数据。

📌 适用场景

适用于 用户登录态管理,如:

  • 传统网站的用户认证
  • Web 后台管理系统
  • 需要服务器记录用户数据的场景

 示例

// Java 中使用 HttpSession
HttpSession session = request.getSession();
session.setAttribute("user", "张三");

// 获取 Session
String user = (String) session.getAttribute("user");

2. Cookie

定义

Cookie 是一种 客户端 状态管理技术,用于存储小量数据,并随着请求发送给服务器。

🔹 特点

  • 存储位置:存储在客户端(浏览器)。
  • 安全性:容易被篡改、劫持,需要搭配 HttpOnlySecure 提高安全性。
  • 生命周期
    • 会话 Cookie:不设置 expiresmax-age,浏览器关闭时自动删除。
    • 持久 Cookie:设置 expiresmax-age,可以在多次会话间保持。
  • 大小限制:单个 Cookie 最大 4KB,浏览器对总数有限制(一般 20 个)。

📌 适用场景

适用于 轻量级数据存储,如:

  • 记录用户偏好(主题颜色、语言设置等)
  • 记住登录信息(记住密码、自动登录)
  • 追踪用户行为(广告、统计等)

 示例

// 设置 Cookie
document.cookie = "username=zhangsan; path=/; max-age=3600; Secure; HttpOnly";

// 读取 Cookie
console.log(document.cookie);

3. Token(令牌)

定义

Token 是一种 无状态 认证机制,不依赖服务器存储,而是通过客户端携带 Token 进行身份认证。

🔹 特点

  • 存储位置:通常保存在客户端(localStoragesessionStorageCookie)。
  • 安全性:需要结合 加密、签名(如 JWT),避免篡改。
  • 无状态:服务器不存储 Token,适用于分布式系统。
  • 生命周期
    • 短期 Token(Access Token):一般几分钟到几小时。
    • 长期 Token(Refresh Token):用于刷新 Access Token,通常有效期较长(如 7 天)。

📌 适用场景

适用于 分布式系统、RESTful API 认证,如:

  • OAuth 2.0 认证
  • JWT(JSON Web Token)认证
  • 微服务架构

示例

生成 JWT
const jwt = require('jsonwebtoken');

// 生成 Token
const token = jwt.sign({ userId: 123 }, 'your_secret_key', { expiresIn: '1h' });

console.log(token);

验证 Token

jwt.verify(token, 'your_secret_key', (err, decoded) => {
    if (err) {
        console.log("Token 无效");
    } else {
        console.log("用户 ID:", decoded.userId);
    }
});

4. 什么时候用?

  • 使用 Session:传统 Web 网站,用户认证(登录后管理 Session)。
  • 使用 Cookie:存储用户偏好、小型数据、自动登录信息。
  • 使用 Token:RESTful API 认证、微服务架构、移动端应用。

如果是 前后端分离 项目,一般采用 Token + JWT 方式认证,而不是使用 Session + Cookie。

📌 结论:

  • Session 适用于服务器端存储用户会话数据,通常用于传统网站的身份认证。
  • Cookie 适用于存储小型数据,但不安全,不能存储敏感信息。
  • Token 适用于 RESTful API,无状态认证方式更适合分布式系统。

如果你是在做 Vue + SpringBoot 项目,推荐使用 JWT Token 方式 进行身份认证,避免 Session 依赖服务器存储。


http://www.kler.cn/a/581133.html

相关文章:

  • 【每日学点HarmonyOS Next知识】状态变量、动画UI残留、Tab控件显示、ob前缀问题、文字背景拉伸
  • SICK Ranger3源码分析——断线重连
  • python之使用scapy扫描本机局域网主机,输出IP/MAC表
  • 算法面试题深度解析:LeetCode 2012.数组元素的美丽值求和计算与多方案对比
  • Acknowledgment.nack方法重试消费kafka消息异常
  • 【SpringMVC】深入解析使用 Postman 在请求中传递对象类型、数组类型、参数类型的参数方法和后端参数重命名、及非必传参数设置的方法
  • 【物联网-以太网-W5500】
  • Django ORM自定义排序的实用示例
  • 神经网络优化
  • DeepSeek-R1本地化部署(Mac)
  • 电机控制常见面试问题(四)———
  • 量子效应模拟:Python中的奇妙世界
  • DeepSeek刷力扣辅助题单 存留记录
  • 在 MAC mini4 上安装与使用 ComfyUI 文生图软件完整指南
  • 小橙优选创新发展
  • android storage_state
  • Opik - 开源 LLM 评估平台
  • 你使用过哪些 Java 并发工具类?
  • Linux运维(三)Linux命令行操作:从菜鸟到高手
  • 文献笔记 - A Survey on Aerial Swarm Robotics