Cookie 和 Session:Web 身份验证的核心机制
文章目录
- 一、Cookie:客户端存储的小数据块
- **核心特性**
- **典型应用场景**
- 二、Session:服务器端的会话存储
- **核心特性**
- **典型应用场景**
- 三、Cookie vs Session:核心区别对比
- 四、最佳实践与扩展
一、Cookie:客户端存储的小数据块
定义:
Cookie 是服务器发送到客户端浏览器并存储在本地的一小段文本数据,用于跟踪用户状态,下次请求时浏览器会自动携带对应 Cookie 到服务器。
诞生背景:
HTTP 协议无状态,无法识别多次请求是否来自同一用户。1994 年 Netscape 公司为解决购物车状态保持问题,在 HTTP/1.0 中引入 Cookie 机制,后成为标准。
核心特性
特性 | 说明 |
---|---|
存储位置 | 客户端(浏览器内存或硬盘) |
大小限制 | 单个 Cookie 通常 ≤ 4KB,每个域名最多存储约 20 - 50 个 Cookie |
传输方式 | 浏览器自动附加到 HTTP 请求头中(Cookie 字段),随请求发送到服务器 |
生命周期 | - 会话级 Cookie:浏览器关闭即失效 - 持久化 Cookie:通过 Expires /Max-Age 指定过期时间 |
常用属性 | Name 、Value 、Domain (作用域域名)、Path (作用域路径)、Secure (仅 HTTPS 传输)等 |
典型应用场景
- 身份验证:存储用户登录凭证(如
JWT
),实现自动登录 - 个性化设置:记录用户偏好(如语言、主题)
- 购物车状态:保存商品列表,跨页面保持状态
- 广告追踪:跟踪用户行为,实现精准营销
二、Session:服务器端的会话存储
定义:
Session 是服务器为每个用户创建的专用存储空间,用于存储用户会话期间的状态数据(如登录信息、购物车数据),通过 Session ID
与客户端关联。
实现原理:
- 用户首次访问服务器时,服务器创建 Session 并生成唯一
Session ID
- 服务器将
Session ID
通过 Cookie 发送给客户端(键名通常为JSESSIONID
或PHPSESSID
) - 后续请求中,浏览器携带
Session ID
Cookie,服务器根据 ID 查找对应 Session 数据
核心特性
特性 | 说明 |
---|---|
存储位置 | 服务器端(内存、文件、数据库或缓存系统如 Redis) |
数据安全 | 敏感数据存储在服务器,避免客户端篡改,安全性更高 |
生命周期 | - 默认随浏览器关闭失效 - 可通过 SessionTimeout 设置超时时间(如 30 分钟) |
依赖关系 | 依赖 Cookie 传递 Session ID (若客户端禁用 Cookie,需通过 URL 重写传递 ID) |
典型应用场景
- 登录状态保持:存储用户登录信息,验证请求合法性
- 复杂业务状态:如多步骤表单填写(注册、支付流程)
- 高安全需求场景:存储敏感数据(如用户权限、交易信息)
三、Cookie vs Session:核心区别对比
维度 | Cookie | Session |
---|---|---|
存储位置 | 客户端(浏览器) | 服务器端 |
数据安全性 | 较低(可被篡改或窃取) | 较高(敏感数据不暴露在客户端) |
存储容量 | 小(单个 ≤ 4KB) | 大(取决于服务器配置) |
网络消耗 | 每次请求携带 Cookie,增加流量 | 仅传输 Session ID ,流量更小 |
跨域支持 | 受同源策略限制 | 由服务器端控制,跨域需特殊处理 |
依赖性 | 独立存在 | 依赖 Cookie 传递 Session ID (默认情况) |
四、最佳实践与扩展
- 安全增强:
- Cookie 中设置
HttpOnly
(防止 XSS 攻击窃取)和Secure
(仅 HTTPS 传输) - Session 定期销毁过期数据,避免内存泄漏
- Cookie 中设置
- 无 Cookie 场景:
- 通过 URL 重写(如
http://example.com/page?sessionid=123
)传递Session ID
- 通过 URL 重写(如
- 分布式系统:
- 使用 Redis 等缓存服务共享 Session 数据,解决服务器集群间的状态同步问题
- 替代方案:
- JWT(JSON Web Token):无状态身份验证,通过 Token 替代 Session,适合微服务架构
- Cookie 是客户端的“通行证”,轻量级但安全性有限,适合存储非敏感状态。
- Session 是服务器的“用户档案”,安全可靠但依赖服务器资源,适合管理复杂会话。
两者常结合使用(如 Session 通过 Cookie 传递 ID),共同构建高效、安全的 Web 身份验证体系。随着技术发展,JWT 等无状态方案逐渐兴起,但 Cookie 和 Session 仍是传统 Web 开发的基石。
相关文章:
Cookie 和 Session:Web 身份验证的核心机制
文章目录 一、Cookie:客户端存储的小数据块**核心特性****典型应用场景**二、Session:服务器端的会话存储**核心特性****典型应用场景**三、Cookie vs Session:核心区别对比四、最佳实践与扩展 一、Cookie:客户端存储的小数据块 …...

vSOME/IP与ETAS DSOME/IP通信的问题解决方案
✅ 一、服务版本不匹配导致 Handover 问题 —— 需要更新 VSOMEIP 代码逻辑 📌 问题描述: 在 SOME/IP 通信中,发布者(offer)与订阅者(subscribe)之间存在服务版本不一致的问题,导致 Handover(切换)失败。 ✅ 解决方案: 需要在 offer_service 和 subscribe 接口中…...
修改vscode切换上一个/下一个标签页快捷键
装了vim后一直没找到切tab页的快捷键 Code>Preferences>Keyboard Shortcuts on macOS 搜索这2个选项 我设置成了commandh 向前切换,commandl向后切换,贴合vim的方向设置 workbench.action.previousEditor commandh workbench.action.nextEdit…...
三大中文wordpress原创主题汉主题
汉主题 汉主题是一款极具特色的 WordPress 主题,由国内专业团队精心打造,专为中文用户设计。其设计灵感源自博大精深的汉文化,将传统文化元素与现代网页设计理念巧妙融合,呈现出独特而典雅的风格。无论是用于个人博客展示文学创作…...

软考-系统架构设计师-第十五章 信息系统架构设计理论与实践
信息系统架构设计理论与实践 15.2 信息系统架构风格和分类15.3 信息系统常用的架构模型15.4 企业信息系统总体框架15.5 信息系统架构设计方法 15.2 信息系统架构风格和分类 信息系统架构风格 数据流体系结构风格:批处理、管道-过滤器调用/返回体系结构风格&#x…...
Redis缓存-数据淘汰策略
数据淘汰策略就是,当redis内存满的时候,此时在向redis添加新的key,那么redis会按照某一种规则将内存中的数据删掉,这种删除数据的规则成为内存的淘汰策略。 redis支持8中淘汰策略 1.noeviction,这种是redis默认的情况…...
52. N 皇后 II【 力扣(LeetCode) 】
文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 52. N 皇后 II 一、题目描述 n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上,并且使皇后彼此之间不能相互攻击。【补充:不能互相攻击就是要求一个皇后的…...

MySQL 8 完整安装指南(Ubuntu 22.04)
MySQL 8 完整安装指南(Ubuntu 22.04) 本教程详细说明如何在 Ubuntu 22.04 上安装和配置 MySQL 8,包含安全优化及远程访问设置。 1️⃣ 添加 MySQL 官方 APT 仓库 官网仓库下载地址:MySQL APT 仓库下载页 下载仓库配置包&#…...
C++ 标准输入输出 -- <iostream>
<iostream>库是 C++ 标准库中用于输入输出操作的头文件。 <iostream> 定义了几个常用的流类和操作符,允许程序与标准输入输出设备(如键盘和屏幕)进行交互。 以下是<iostream>库的详细使用说明,包括其主要类和常见用法示例。 主要类 std::istream:用于…...
记一次sql按经纬度计算距离
具体代码: ROUND函数在mysql可以用来计算经纬度,代码如下: SELECTa.store_name_sfa as storeName,a.storeid_sfa as store_id,a.link_man_sfa as link_man,a.link_phon_sfa as link_phone,a.photo as image_url,a.district,a.street,ROUND(6…...

安卓jetpack compose学习笔记-UI基础学习
哲学知识应该用哲学的方式学习,技术知识也应该用技术的方式学习。没必要用哲学的态度来学习技术。 学完安卓技术能做事就ok了,安卓技术肯定是有哲学的,但是在初学阶段没必要讨论什么安卓哲学。 学习一们复杂技术的路径有很多,这里…...
线性回归用于分类
线性回归本身是一种用于回归问题的技术,即预测一个连续的目标变量值。然而,线性回归也可以被改造或结合其他技术来用于分类问题,尽管这不是其最直接或最常见的用途。以下是几种将线性回归应用于分类问题的方法或相关概念: 阈值划分…...
解锁电商新势能:商城系统自动 SaaS 多开功能深度解析
在电商行业加速向精细化、多元化运营转型的当下,传统的商城系统部署模式已难以满足企业快速拓展业务的需求。此时,商城系统自动 SaaS 多开功能横空出世,以智能、高效、灵活的特性,成为众多电商企业突破发展瓶颈的关键利器。这一功…...

蓝桥杯_DS18B20温度传感器---新手入门级别超级详细解析
目录 一、引言 DS18B20的原理图 单总线简介: 编辑暂存器简介: DS18B20的温度转换与读取流程 二、代码配置 maic文件 疑问 关于不同格式化输出符号的使用 为什么要rd_temperature()/16.0? onewire.h文件 这个配置为什么要先读lo…...

C++中锁与原子操作的区别及取舍策略
文章目录 锁与原子操作的基本概念锁(Lock)原子操作(Atomic Operations) 锁与原子操作的区别1. **功能**2. **性能**3. **复杂性**4. **适用场景** 锁与原子操作的取舍策略1. **简单变量操作**2. **复杂共享资源**3. **性能敏感场景…...
ESP32对接巴法云实现配网
目录 序言准备工作巴法云注册与使用Arduino准备 开发开始配网 序言 本文部分内容摘抄原创作者巴法云-做优秀的物联网平台 代码有部分修改并测试运行正常 巴法云支持免费用户通过开发对接实现各智能音箱设备语音控制智能家居设备,并有自己的App进行配网和控制&…...
《深度剖析:基于Meta的GameFormer构建自博弈AI游戏代理》
自博弈AI游戏代理,是一种具备自主学习和自我提升能力的人工智能系统。它打破了传统AI依赖预设规则和固定策略的局限,能够在游戏过程中不断与自身进行对战,通过反复博弈来积累经验、优化策略,从而实现智能水平的持续提升 。这种独特…...

C++语法系列之类型转换
前言 类型转换是经常存在的情况,类型转换分为隐式类型转化 和 显式类型转化 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败 double i 3.3; int b i; //隐式类型转化 double -> intC搞出来了四种强制类…...
Qwen3 技术报告解读一
📘 Qwen3 技术报告解读:通义千问系列新成员的技术亮点与能力分析 一、论文写了什么? 本文来自阿里通义实验室发布的 《Qwen3 Technical Report》,介绍了其最新一代大语言模型 Qwen3 的技术架构、训练方法以及在多个关键任务上的…...

详解开漏输出和推挽输出
开漏输出和推挽输出 以上是 GPIO 配置为输出时的内部示意图,我们要关注的其实就是这两个 MOS 管的开关状态,可以组合出四种状态: 两个 MOS 管都关闭时,输出处于一个浮空状态,此时他对其他点的电阻是无穷大的ÿ…...

【八股消消乐】索引失效与优化方法总结
😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本专栏《八股消消乐》旨在记录个人所背的八股文,包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点ÿ…...

一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录——4. 配置服务器终端环境 zsh , oh my zsh, vim
前言 通过前面几篇文章,我们顺利的 安装了 ubuntu server 服务器,并且配置好了 ssh 免密登录服务器,也安装好了 服务器常用软件安装,接下来,我们要仔细的配置一下我们的终端环境,让服务器的终端更加好用。 一般情况下…...

数据安全合规体系构建的“三道防线“
引言 "三道防线"模型架构图 #mermaid-svg-wbeppAbwa3Vb3nL2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-wbeppAbwa3Vb3nL2 .error-icon{fill:#552222;}#mermaid-svg-wbeppAbwa3Vb3nL2 .error-text{fi…...

【Spring底层分析】Spring AOP基本使用+万字底层源码阅读分析
一、AOP基本使用 三步: 将业务逻辑组件和切面类都加入到容器中,告诉Spring哪个是切面类(Aspect)在切面类上的每一个通知方法上标注通知注解,告诉Spring何时(Before、After、Around……)何地运…...
Python数据分析及可视化中常用的6个库及函数(二)
Python数据分析及可视化中常用的6个库及函数(二) 摘要:以下是Python数据分析及可视化常用的6个库的详细介绍,包括它们的概述以及每个库中最常用的10个函数(如果某些库常用函数不足10个,则列出所有常用函数)。每个函数都附带功能描述、用法说明和使用示例。这些库…...

新德通科技:以创新驱动光通信一体化发展,赋能全球智能互联
在数字经济与AI技术高速发展的今天,光通信作为信息传输的核心基础设施,正迎来前所未有的升级浪潮。深圳新德通科技有限公司(以下简称“新德通科技”)凭借其深厚的技术积累与一体化产品布局,成为行业内的中坚力量。本文…...
Selenium的底层原理
Selenium 底层主要依赖于 WebDriver 协议(即 W3C WebDriver 规范,早期也有 JSON Wire Protocol)来实现对浏览器的远程控制,其核心架构可以分为以下几层: Selenium 客户端(Client Library) 支持多…...
PostgreSQL的扩展 auth_delay
PostgreSQL的扩展 auth_delay auth_delay 是 PostgreSQL 提供的一个安全相关扩展,主要用于防止暴力破解攻击。它通过在认证失败后引入人为延迟来增加暴力破解的难度。 一、扩展基础 功能:在认证失败后增加延迟目的:减缓暴力破解和字典攻击…...
[Java 基础]Java 是什么
Java 是一门编程语言。 查看编程语言热门排行:https://www.tiobe.com/tiobe-index/ Java 的特点: 面向对象:Java 是面向对象的语言,支持封装、继承和多态等特性。 平台无关性:Java 通过“一次编写,到处…...
Qt学习2
跟学视频 1.菜单栏和工具栏 //菜单栏最多只能有一个//菜单栏创建QMenuBar * bar menuBar();//将菜单栏放到窗口中setMenuBar(bar);//创建菜单QMenu * fileMenu bar->addMenu("开始");QMenu * editMenu bar->addMenu("编辑");//创建菜单项QAction…...