计算机网络——Session、Cookie 和 Token

在 Web 开发中,SessionCookieToken 是实现用户会话管理和身份验证的核心技术。它们既有联系,也有明显区别。以下从定义、原理、联系、区别和应用场景等方面详细解析。

一、基本定义与原理

1. Cookie
  • 定义
    是浏览器存储在客户端的小型文本数据(键值对),由服务器生成并发送给浏览器,后续浏览器会自动携带 Cookie 访问同一域名下的资源。
  • 原理
    • 服务器通过响应头 Set-Cookie 发送 Cookie 到浏览器。
    • 浏览器每次请求同一域名时,会在请求头 Cookie 中携带该 Cookie。
    • 可设置过期时间(Expires/Max-Age),默认随浏览器关闭失效。
  • 示例
    Set-Cookie: sessionId=abc123; Expires=Mon, 22 May 2025 12:00:00 GMT; Path=/
    
2. Session
  • 定义
    是服务器端用于存储用户会话数据的临时存储机制,通过 sessionId 与客户端 Cookie 绑定。
  • 原理
    • 用户首次访问时,服务器生成 sessionId 并存储会话数据(如用户信息),同时通过 Cookie 将 sessionId 发送给浏览器。
    • 后续请求中,浏览器携带 sessionId,服务器根据该 ID 查找对应的会话数据。
  • 存储介质
    内存、文件、数据库(如 Redis)等,需考虑服务器集群时的共享问题。
3. Token
  • 定义
    是客户端向服务器证明身份的凭证(通常为加密字符串),由服务器生成并返回给客户端,后续客户端需主动携带 Token 访问资源。
  • 原理
    • 登录时,用户提交凭证(如用户名/密码),服务器验证通过后生成 Token(含用户信息、过期时间等),返回给客户端。
    • 客户端存储 Token(如 localStorage、Cookie),每次请求时在请求头(如 Authorization: Bearer <token>)中携带。
    • 服务器验证 Token 的有效性(如签名、过期时间),无需查询数据库。
  • 常见类型
    • JWT(JSON Web Token):自包含数据(头部、载荷、签名),无需服务器存储。
    • OAuth Token:用于第三方授权(如微信登录)。

二、联系与区别

联系
  1. 均用于会话管理与身份验证
    • Cookie 和 Session 配合使用(Cookie 存储 sessionId,Session 存储用户数据)。
    • Token 可替代传统的 Session-Cookie 模式,实现无状态身份验证。
  2. 数据传递依赖 HTTP 请求
    均通过 HTTP 请求头或 Cookie 传递信息,用于识别用户身份。
区别
维度CookieSessionToken
存储位置客户端(浏览器)服务器端(内存/数据库等)客户端(自定义存储,如 localStorage)
数据性质小型文本数据(键值对)任意类型数据(如对象、数组)加密字符串(自包含数据或引用标识)
状态性有状态(依赖服务器会话存储)有状态(依赖服务器存储)无状态(JWT 自包含数据,无需服务器查询)
安全性较低(易被篡改,需配合 HttpOnly/Secure较高(敏感数据存服务器)高(加密签名,防篡改)
跨域支持受同源策略限制受服务器环境限制(需共享会话存储)灵活(可通过请求头携带,跨域友好)
典型应用存储用户偏好、购物车标识存储用户登录状态、权限信息接口认证(如 RESTful API)、单点登录(SSO)
过期机制客户端控制(通过 Expires/Max-Age)服务器控制(可设置超时时间)客户端与服务器共同控制(Token 自身包含过期时间)

三、核心场景对比

1. 传统 Web 应用(Cookie + Session)
  • 流程
    登录 → 服务器生成 sessionId 和 Session 数据 → 通过 Cookie 返回 sessionId → 后续请求携带 Cookie → 服务器验证 sessionId 并获取用户数据。
  • 优点
    • 服务器可控性强,适合存储敏感信息(如用户权限)。
    • 无需在请求中携带大量数据。
  • 缺点
    • 服务器需维护会话存储,集群环境下需共享存储(如 Redis)。
    • 跨域场景下 Cookie 传递受限。
2. 现代 API 应用(Token 为主)
  • 流程
    登录 → 服务器生成 JWT → 客户端存储 JWT → 每次请求携带 JWT(如请求头 Authorization)→ 服务器验证 JWT 有效性。
  • 优点
    • 无状态,服务器无需存储会话,可横向扩展。
    • 跨域友好,适合前后端分离、移动端、第三方服务调用。
  • 缺点
    • JWT 自身包含数据,若数据量大(如用户权限列表),会增加请求体积。
    • 过期后需重新登录(可通过刷新令牌(Refresh Token)优化)。

四、如何选择?

  1. 优先使用 Cookie + Session 的场景

    • 需要存储大量敏感数据(如用户购物车详情)。
    • 传统单体应用,无需考虑跨域和分布式部署。
  2. 优先使用 Token(如 JWT)的场景

    • 前后端分离应用、API 接口认证。
    • 分布式系统或微服务架构(避免会话共享问题)。
    • 第三方授权(如 OAuth 2.0)。
  3. 混合使用场景

    • 用 Cookie 存储 Token(配合 HttpOnly 防止 XSS 攻击),同时利用 Token 的无状态特性。
    • 使用 Session 存储临时数据(如验证码),Token 用于长期身份验证。

五、安全注意事项

  1. Cookie 安全

    • 设置 HttpOnly:禁止 JavaScript 读取 Cookie,防范 XSS 攻击。
    • 设置 Secure:仅通过 HTTPS 传输 Cookie,防止中间人攻击。
    • 避免存储敏感数据(如密码)。
  2. Session 安全

    • 定期更新 sessionId(如用户重新登录时),防止会话固定攻击。
    • 限制 Session 存储时间,避免会话长期有效。
  3. Token 安全

    • 使用 HTTPS 传输 Token,防止明文泄露。
    • 对 JWT 签名(非对称加密,如 RS256),防止伪造。
    • 短时效 Token + 长时效刷新令牌(Refresh Token),降低 Token 泄露风险。

总结

  • Cookie 是客户端存储的基础,常与 Session 配合实现有状态会话管理。
  • Token 是无状态的身份凭证,适合现代分布式架构和 API 场景。
  • 选择时需结合业务需求(如是否跨域、数据量、安全性)和技术架构(单体 vs 微服务),避免过度设计或安全漏洞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/80986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双均线量化交易策略指南

策略原理 采用两条不同周期的简单移动平均线&#xff08;SMA&#xff09;&#xff1a; 短期均线&#xff1a;5日线&#xff08;快速反应价格变化&#xff09;长期均线&#xff1a;20日线&#xff08;反映长期趋势&#xff09; 交易信号生成规则&#xff1a; 当 5日线 > …

视频太大?用魔影工厂压缩并转MP4,画质不打折!

在日常生活中&#xff0c;我们常常需要将视频文件转换成不同的格式以适应各种设备或平台的播放需求。魔影工厂作为一款功能强大且操作简单的视频转换工具&#xff0c;深受用户喜爱。本文中简鹿办公将手把手教你如何使用魔影工厂将视频转换为MP4格式&#xff0c;并进行个性化设置…

大腾智能 PDM 系统:全生命周期管理重塑制造企业数字化转型路径

在当今激烈的市场竞争中&#xff0c;产品迭代速度与质量已成为企业生存与发展的核心命脉。面对客户需求多元化、供应链协同复杂化、研发成本管控精细化等挑战&#xff0c;企业亟需一套能够贯穿产品全生命周期的数字化解决方案。 大腾智能PDM系统通过构建覆盖设计、研发、生产、…

CodeBuddy一腾讯内部已有超过 85% 的程序员正在使用de编程工具

大家好&#xff0c;我是程序员500佰&#xff0c;目前正在前往独立开发路线&#xff0c;我会在这里分享关于编程技术、独立开发、技术资讯以及编程感悟等内容。 如果本文能给你提供启发和帮助&#xff0c;还请留下你的一健三连&#xff0c;给我一些鼓励&#xff0c;谢谢。 本文直…

解锁 Zblog 资讯系统:502 错误修复与双域名适配的实战秘籍

在网络世界的激烈竞争中&#xff0c;资讯类网站如同战场上的士兵&#xff0c;每一次页面加载、每一次内容展示都关乎着用户的留存与转化。而 Zblog 作为备受青睐的资讯系统&#xff0c;承载着众多站长的流量梦想。然而&#xff0c;在网站运营过程中&#xff0c;502 错误页面的突…

今日打卡,Leetcode第四题:寻找两个正序数组的中位数,博主表示就会sorted

4. 寻找两个正序数组的中位数 博主只会第一个暴力解法&#xff0c;然后将官网上的源码上添加些注释&#xff0c;尝试理解&#xff0c;分下今日刷题记录 题目描述 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个…

Jouier 普及组十连测 R3

反思 首先&#xff0c;先悔恨一下这次的比赛成绩。 这次比赛的教训就是&#xff0c;简单的题目一定要打不要被复杂的题面震慑到&#xff0c;以及变量名不能是保留字&#xff0c;如第一题的x1,y1&#xff0c;要开long long&#xff0c;计算好数据范围&#xff0c;如第三第四题。…

Open CASCADE学习|非线性方程组求解技术详解

引言 在几何建模与工程计算中&#xff0c;非线性方程组的求解是常见的核心问题。Open CASCADE&#xff08;以下简称OCC&#xff09;作为开源的几何建模内核&#xff0c;提供了丰富的数学工具库&#xff0c;其中math_FunctionSetRoot类专为求解非线性方程组设计。本文将深入探讨…

科技初创企业创新推动商业未来

在这个因变革而蓬勃发展的世界里&#xff0c;科技初创企业已成为各行业创新、颠覆与转型的驱动力。这些雄心勃勃的企业正在重塑商业格局&#xff0c;挑战既定规范&#xff0c;并不断突破可能性的边界。本文将深入探索科技初创企业的精彩领域&#xff0c;探讨它们如何通过创新塑…

霍尼韦尔HMR2300-D00-485数字模块

型号&#xff1a;HMR2300-D00-485 类型&#xff1a;数字通信模块&#xff08;RS-485接口&#xff09; 制造商&#xff1a;霍尼韦尔&#xff08;Honeywell&#xff09;&#xff0c;隶属于其工业自动化或楼宇自动化产品线。 典型用途&#xff1a; 用于扩展主控制器&#xff08;如…

如何在 Windows 11 或 10 上更改 WIFI 或以太网 MAC 地址?

无论你使用的是哪种操作系统,更改 MAC 地址在各种场景中都有其益处。每个网卡的 MAC 地址都是唯一的,由网络适配器在出厂时就已经分配完成;它帮助系统在物理网络上进行通信,并为其提供身份识别。然而,如果你出于某种合法原因想要更改 Windows 上的当前 MAC 地址,那么我们…

Python语法特点与编码规范

注释 单行注释 把#号当做注释符号 多行注释 python中并没有规定多行注释标记&#xff0c;通常使用单引号作为多行注释 中文注释 规定文件所用编码&#xff0c;当时是为解决python2不支持中文的问题 #codingutf-8代码缩进 python采用代码缩进和冒号区分代码层次&#xff0c…

跟Gemini学做PPT:字号选择

字号的选择对于 PPT 的可读性和视觉效果至关重要。以下是一些通用的建议和针对你具体情况的字号选择指南&#xff1a; 通用字号选择原则&#xff1a; 对比度&#xff1a; 文字颜色与背景颜色形成高对比度&#xff0c;确保易读。字体&#xff1a; 选择清晰、专业的字体&#x…

【JVM 03-JVM内存结构之-虚拟机栈】

虚拟机栈 笔记记录 1. 定义1.1 演示栈帧 2. 特点3. 线程运行诊断3.1 案例1 cpu占用过多&解决3.2 案例2 程序运行很长时间没有结果 4. 拓展知识&问题辨析4.1 栈的内存越大越好嘛&#xff1f;(不是)4.2 方法内的局部变量是否线程安全&#xff1f;(是线程安全的)4.2.1 局部…

文章记单词 | 第104篇(六级)

一&#xff0c;单词释义 keyboard /ˈkiːbɔːrd/ n. 键盘underlying /ˌʌndərˈlaɪɪŋ/ adj. 潜在的&#xff1b;根本的&#xff1b;基础的June /dʒuːn/ n. 六月tactics /ˈtktɪks/ n. 战术&#xff1b;策略&#xff1b;手段south /saʊθ/ n./adj./adv. 南方&#x…

中宏立达与天空卫士达成战略合作

战略合作篇 中宏立达-天空卫士 2025年5月23日&#xff0c;中宏立达与天空卫士在中宏立达集团总部北京丽金智地中心正式签署战略合作协议。中宏立达总经理王博先生与天空卫士高级副总裁兼首席运营官巩文坚先生代表双方签署协议。这标志着两家领军企业在数字安全领域的深度合作正…

RxJS 高阶映射操作符详解:map、mergeMap 和 switchMap

1. map 操作符 map 是最基本的转换操作符&#xff0c;用于对 Observable 发出的每个值进行一对一转换。 基本特点&#xff1a; 同步操作一对一转换不改变 Observable 的发出时机 详细示例&#xff1a; import { of } from rxjs; import { map } from rxjs/operators;// 示…

基于stm32的多旋翼无人机(Multi-rotor UAV based on stm32)

由于一直在调试本项目&#xff0c;好久没有发文章&#xff0c;最近本项目的PID调试初见成效&#xff01;开始正文前首先感谢各位粉丝的支持&#xff0c;以及对本项目技术上支持的老师以及师兄&#xff0c;谢谢你们&#xff01; 对应源码及文件&#xff1a;源码及文件下载 基于…

量子传感器:开启微观世界的精准探测

随着量子技术的飞速发展&#xff0c;量子传感器逐渐成为前沿科技领域的热门研究方向。量子传感器利用量子力学的特性&#xff0c;能够实现对物理量的极高精度测量&#xff0c;其应用范围涵盖了基础科学研究、医学诊断、环境监测以及国防安全等多个领域。本文将深入探讨量子传感…

河道管网排口在线监测系统解决方案

一、方案概述 我国作为世界上河流数量最为丰富的国家之一&#xff0c;拥有众多历史悠久的壮阔江河流域。然而&#xff0c;伴随经济社会的迅猛发展&#xff0c;河湖管理与保护面临诸多新挑战&#xff0c;诸如河道干涸、湖泊萎缩、水环境恶化以及河湖功能退化等问题&#xff0c;对…