Web开发会话技术学习笔记
一、会话基础概念
1.1 什么是会话?
- 定义:浏览器与服务器的一次连接称为会话(从第一次访问到任意一方断开连接)
- 特点:
- 包含多次请求和响应(如:登录→查询部门→查询员工)
- 浏览器关联性:同一浏览器多次请求属于同一会话
- 多浏览器访问会创建多个独立会话
1.2 会话跟踪
- 核心需求:识别多次请求是否来自同一浏览器
- 技术本质:在HTTP无状态协议下实现数据共享
- 典型场景:登录状态维持、购物车数据同步
二、会话跟踪三大方案对比
2.1 Cookie(客户端存储)
工作流程
- 服务端通过
Set-Cookie
响应头设置数据 - 浏览器自动存储Cookie
- 后续请求自动通过
Cookie
请求头携带
代码示例
|
|
优缺点
✅ 优点:
- HTTP协议原生支持(自动处理)
❌ 缺点:
- 移动端兼容性差(Android/iOS限制)
- 安全性风险(用户可禁用/篡改)
- 跨域限制(协议/IP/端口任一不同即受限)
2.2 Session(服务端存储)
核心机制
- 基于Cookie传递JSESSIONID
- 会话数据实际存储在服务端
工作流程
- 首次请求创建Session对象(含唯一ID)
- 通过
JSESSIONID
Cookie返回ID - 后续请求通过ID查找对应Session
代码示例
|
|
优缺点
✅ 优点:
- 数据存储在服务端,安全性较高
❌ 致命缺点:
- 集群环境失效(Session不共享)
- 依然依赖Cookie(继承Cookie所有缺点)
- 服务器内存压力大
2.3 令牌技术(主流方案)
核心特点
- 无状态:服务端不存储会话数据
- 自包含:用户信息/签名直接编码在令牌中
典型流程
优势亮点
✅ 核心优势:
- 完美支持移动端和跨域
- 天然适应集群环境
- 减轻服务器存储压力
❌ 实现复杂度:
- 需自行处理令牌的生成/传递/验证
- 需要选择安全的加密算法(如HS256/RSA)
三、企业级方案选型建议
- 传统Web项目:可考虑Session+Cookie(需解决集群问题)
- 前后端分离/移动端:必须使用令牌技术
- 高并发场景:JWT等无状态方案是首选
🔥 重点结论:现代Web开发中,令牌技术(如JWT)已成为会话跟踪的事实标准,其优势明显覆盖了传统方案的缺陷。