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

Cookie、Session和Token鉴权

Http协议和TCP协议

HTTP(HyperText Transfer Protocol,超文本传输协议)是Web 的基础通信协议,用于客户端(通常是浏览器)和服务器之间的数据交换。它是一种无状态的、基于请求-响应模型的应用层协议。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为"一次连接"。

TCP(Transmission Control Protocol,传输控制协议) 是一种面向连接的可靠的基于字节流的传输层通信协议,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去,服务器和客户端均可主动发起断开连接的请求。

HTTP 是基于 TCP 实现的应用层协议

对比维度HTTPTCP
所属层级应用层传输层
作用定义网页请求/响应的规则提供可靠传输通道
是否建立连接不需要自己建立连接(依赖 TCP)通信前需三次握手建立连接
是否可靠传输不保证(由 TCP 负责)保证可靠、有序、无差错传输
是否面向连接
协议端口默认 80(HTTPS 是 443)没有固定端口(由应用指定)
示例应用浏览器访问网页HTTP、FTP、SMTP 等都依赖 TCP

建立连接:三次握手(Three-Way Handshake)

  • 客户端发送 SYN,表示请求连接(Seq=x)
  • 服务器回复 SYN+ACK(Ack=x+1, Seq=y)
  • 客户端回复 ACK(Ack=y+1)

断开连接:四次挥手(Four-Way Handshake)

  • 客户端发送 FIN,表示断开连接
  • 服务端回复 ACK,确认接收
  • 服务端再发送 FIN,表示它也准备断开
  • 客户端回复 ACK,连接正式断开

SYN😦Synchronize Sequence Numbers,同步序列编号)
ACK😦Acknowledgement Number,确认编号)
FIN:结束标志 

请求报文和相应报文

请求报文组成部分:
  • 请求行:方法 + URL + 协议版本
  • 请求头(Headers):如 Host、User-Agent、Accept
    Content-Type:请求的报文格式
    Accept:客户端接受的数据类型
    User-Agent:发送请求的客户端类型
    X-Requested-with:Ajax请求,异步请求
    Cookie:请求携带的Cookie信息
  • 空行
  • 请求体(Body):通常用于 POST 请求提交数据,如表单、JSON

相应报文组成部分:

  • 状态行:协议版本 + 状态码 + 状态消息
  • 响应头(Headers):如 Content-Type、Set-Cookie
    Set-Cookie:服务器反映给客户端的Cookie信息
  • 空行
  • 响应体(Body):服务器返回的实际内容

特点:简单、快捷、无状态、无连接 

特点说明
无状态(Stateless)每次请求之间没有记忆能力服务器不会保留之前的请求信息。可以通过 Cookie、Session 等机制弥补
应用层协议建立在 TCP(传输层)之上,用于数据的实际传输
请求-响应模式客户端发送请求,服务器返回响应
灵活性强支持多种数据格式(HTML、JSON、图片等)

常见状态码

类别范围含义
1xx信息响应
2xx成功:如 200 OK, 201 Created
3xx重定向:如 301 Moved Permanently, 302 Found
4xx客户端错误:如 400 Bad Request, 404 Not Found, 403 Forbidden
5xx服务器错误:如 500 Internal Server Error, 502 Bad Gateway

Https=http+SSl安全传输协议,默认端口443

基本工作流程

  • 客户端与服务器建立 TCP 连接(通常使用端口 80,HTTPS 是 443)
  • 客户端发送 HTTP 请求
  • 服务器处理请求并返回 HTTP 响应
  • 客户端接收并处理响应内容

Cookie 

cookie不是缓存,是服务器产生的并且保存在客户端的一小段信息,键值型数据,用于在客户端和服务器之间“维持状态”。

类型说明
会话 Cookie保存在内存,不设置过期时间,关闭浏览器即失效
持久 Cookie保存在硬盘,设置 ExpiresMax-Age,在指定时间后失效

结构

字段含义
name=value键值对内容(必须)
Expires / Max-Age过期时间
Path生效路径(默认当前路径)
Domain生效域名(支持子域共享)

鉴权流程

1.客户端(浏览器)第1次访问服务器的时候,服务器会生成Cookie,并且通过响应头的Set-Cookie保存相应信息传输给客户端

2.客户端第2-N次访问服务器时,请求头都会自动携带Cookie中的信息传输到服务器以实现鉴权

Session

session指会话,通过cookie传输

鉴权流程

1.客户端登录访问服务器是,服务器会生成Session-id(保存在服务器)保存在session中,并且通过cookie返回给客户端,所有session都属于会话级cookie

2.客户端后续访问服务器端时,都会携带session-id信息,用于服务器端鉴权

Token

Token(令牌)是用户登录成功后,由服务端生成返回给客户端的一段字符串,用于标识该用户的身份。它是一种无状态的身份认证机制。

鉴权流程

1.客户端第一次登录访问服务器端后,会自动生成token,保存在服务器端的硬盘或数据库中,

2.之后的所有请求,都会由客户端保存token在请求头或者请求参数中,实现鉴权

token一般都是经过加密的,并且由生命周期

加密方式:

  • 对称加密算法:DES,AES,Base64
  • 双钥加密:RSA
  • MD5,SHA。。。

JWT就是一种最常见的token,他的结构

  • Header:令牌头部,说明签名算法等
  • Payload:载荷,包含用户 ID、角色、过期时间等
  • Signature:签名,防篡改

Token 鉴权流程详解(以 JWT 为例)

  1. 用户发送账号 + 密码给服务器
  2. 服务端验证通过后,生成 JWT(包含用户信息 + 过期时间)并签名
  3. 服务端将 JWT 返回给客户端
  4. 客户端存储在本地(如 localStoragesessionStorage
  5. 后续请求中,客户端在 Header 中携带:Authorization: Bearer <token>
  6. 服务端通过公钥 / 密钥验证 Token 是否有效,并解析其中的用户信息
  7. 返回用户请求的数据
特性CookieSessionJWT(Json Web Token)
存储位置浏览器端(客户端)服务器端浏览器或本地存储
安全性中等,易被窃取高,服务器控制高,但需保护私钥
扩展性差(依赖浏览器)中(占服务器资源)强(无状态,适合分布式)
状态保存客户端保存状态服务器保存 Session 状态Token 本身携带状态信息
是否支持跨域✅(通过 Header)

LocalStorage和sessionStorage 

localStorage 和 sessionStorage 是现代 Web 前端提供的强大本地存储手段,适用于非敏感信息的持久或临时存储,但在安全性设计上需特别小心。

特性localStoragesessionStorage
生命周期永久保存,除非主动删除当前标签页会话,关闭页面就清除
跨标签页共享✅ 同源的所有标签页共享❌ 不共享,每个标签页有独立存储
存储大小限制一般为 5~10 MB同样是 5~10 MB
与 Cookie 比较不随请求发送,更大容量不随请求发送,更大容量
访问方式JS 脚本直接访问JS 脚本直接访问
http://www.xdnf.cn/news/9396.html

相关文章:

  • Python实用脚本:可视化分割txt标签数据
  • TWTSolutions水厂污水厂设计计算软件:化学强化絮凝单元
  • leetcode:1688. 比赛中的配对次数(python3解法,数学相关算法题)
  • ubuntu安装tigervnc
  • Python优雅执行SSH命令:10种方法+虚拟环境深度实践
  • 使用 mysqldump 获取 MySQL 表的完整创建 DDL
  • Spring AI(一)
  • windows 环境中 python连接到达梦库,及相关问题解决办法
  • TDengine 中的存储配置
  • 线程池详解:原理、使用与优化
  • 78. Subsets和90. Subsets II
  • Linux:基础指令与内涵理解(下)与权限
  • git 命令之-git cherry-pick
  • 短剧看广告APP系统开发:打造高效变现与用户体验双赢平台
  • 人工智能AI之机器学习基石系列 第 2 篇:数据为王——机器学习的燃料与预处理
  • JavaSE核心知识点04工具04-04(Git)
  • 专业教育机构视频网站平台播放器页面如何处理视频加密的?
  • [React]实现一个类zustand公共状态库
  • 2025上半年软考系统架构设计师选择题试题与答案
  • AI Agents执行流程和决策流程学习
  • 零基础设计模式——结构型模式 - 组合模式
  • RapidOCR4j项目学习
  • 润和星闪WS63E的MQTT示例程序存在的潜在问题
  • 经典查找算法合集(下)
  • 行为型:命令模式
  • 多语言实现插值查找算法
  • 理解vue-cli中的webpack
  • Minktec 柔性弯曲传感器,灵敏捕捉坐姿弓背、精准监测行走姿态,守护儿童背部健康,为科学健身提供数据支撑,开启职业健康与背痛 AI 干预新方向。
  • vue + ant-design + xlsx 实现Excel多Sheet页导出功能
  • 如何通过ETL对WebService进行调用