cookie、session和Token的区别?最通俗移动解释

news/2025/2/21 21:57:26/文章来源:https://www.cnblogs.com/mhwq/p/18730301

首先,Cookie是存储在客户端的小型数据片段,用来记录用户的状态。比如,用户登录完成后,下次请求时浏览器会自动发送这个Cookie给服务器,服务器就能识别用户。但Cookie容易被CSRF或XSS攻击,安全性需要注意。

然后是Session,Session的数据是存在服务器端的,比如内存、数据库或文件系统里。用户登录后,服务器生成一个唯一的Session ID,通过Cookie发给客户端。之后客户端每次请求带上这个ID,服务器就能找到对应的Session数据。Session比Cookie安全,因为数据在服务器,但服务器需要存储和管理这些Session,可能影响扩展性,尤其是在分布式系统中需要共享Session状态。

接下来是Token,常见的是JWT(JSON Web Token)。Token也是由服务器生成,但是在客户端保存,客户端每次请求在Authorization头中带上Token,服务器验证签名有效性即可,不需要存储会话状态。Token适合分布式或跨域场景,因为服务器无状态。不过一旦Token被盗,可能会被滥用,所以需要设置较短的过期时间或用HTTPS增强安全

  1. Cookie
    定义
    Cookie 是由服务器生成并发送到客户端(浏览器)的一小段文本数据,存储在客户端本地(如浏览器内存或硬盘)。
    每次请求时,浏览器会自动将 Cookie 附加到 HTTP 请求头中(如 Cookie: name=value)。

特点

客户端存储:数据保存在客户端,可能被篡改或窃取(需防范 XSS/CSRF 攻击)。

自动传输:浏览器自动在请求中携带 Cookie(包括域名、路径、过期时间等限制)。

容量限制:单个 Cookie 通常不超过 4KB,每个域名下的 Cookie 数量有限。

常见用途

会话管理(如 Session ID 通过 Cookie 传递)。

用户偏好设置(如语言、主题)。

  1. Session
    定义
    Session 是服务器端存储的用户会话数据(如用户登录状态、临时数据)。
    服务器为每个用户创建一个唯一的 Session ID(通常通过 Cookie 传递到客户端),后续请求通过该 ID 关联对应的 Session 数据。

特点

服务端存储:Session 数据存储在服务器内存、数据库或缓存(如 Redis)中。

依赖 Cookie:Session ID 通常通过 Cookie 传递(也可通过 URL 参数,但不安全)。

安全性较高:敏感数据不直接暴露给客户端。

扩展性问题:服务器需要维护 Session 状态,分布式系统中需共享 Session 存储(如用 Redis 集群)。

常见用途

用户登录状态管理。

临时存储多步骤表单数据(如购物车)。

  1. Token(如 JWT)
    定义
    Token 是一种自包含的凭证(如 JWT),由服务器生成并签名,包含用户身份、权限和有效时间等信息。
    客户端保存 Token(如 LocalStorage 或 Cookie),并在请求时通过 HTTP 头(如 Authorization: Bearer )发送到服务器。

特点

无状态:服务器无需存储 Token,仅需验证签名和有效性。

可跨域:适合分布式系统或跨域场景(如微服务、第三方登录)。

安全性依赖实现:需防范 XSS(LocalStorage 存储)或 CSRF(Cookie 存储)。

灵活过期机制:支持短期 Token + Refresh Token 续签。

常见用途

无状态 API 认证(如 RESTful API)。

单点登录(SSO)。

关键区别总结
特性 Cookie Session Token(如 JWT)
存储位置 客户端(浏览器) 服务端 客户端(LocalStorage/Cookie)
数据传输方式 自动通过 Cookie 头 依赖 Session ID(通常通过 Cookie) 手动添加到请求头(如 Authorization)
安全性 低(易受 XSS/CSRF 攻击) 较高(数据在服务端) 较高(需签名和 HTTPS)
扩展性 无状态 需共享存储(分布式场景) 无状态,天然支持分布式
跨域支持 受限(同源策略) 受限 支持
典型应用场景 会话管理、用户偏好 服务端状态管理 无状态 API、跨域认证
如何选择?
Cookie + Session:适合传统服务端渲染应用(如 PHP、JSP),需维护用户状态且对安全性要求较高。

Token:适合前后端分离、API 优先架构(如 SPA、移动端),或需要跨域/分布式的场景。

混合方案:如将 JWT 存储在 HttpOnly Cookie 中,兼顾安全性与无状态性。

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

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

相关文章

【技术解读】【CloudSec】EmojiDeploy: Smile! Your Azure web service just got RCEd ._.

目录前言存在漏洞的服务 - Kudu SCM漏洞利用的关键点1、Same-site配置不当2、服务端对Origin的校验可被绕过3、利用一个高危功能接口3.1、DoS - POST /api/scm/clean、POST /api/app/restart3.2、RCE - POST /api/zipdeploy没校验一些自定义请求头 - 如:If-Match: *、X-Reques…

基于扩频解扩+turbo译码的16QAM图传通信系统matlab误码率仿真,扩频参数可设置

1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。2.算法涉及理论知识概要该通信系统主要用于图像传输,适用于对图像质量和传输可靠性要求较高的场景,如无人机图像传输、视频监控、无线电视广播等。在复杂的电磁环境…

【技术学习】【WebSec】GraphQL API vulnerabilities

目录Lab1:Accessing private GraphQL postsLab2:Accidental exposure of private GraphQL fieldsLab3:Finding a hidden GraphQL endpointLab4:Bypassing GraphQL brute force protectionsLab5:Performing CSRF exploits over GraphQLReference Lab1:Accessing private G…

通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器

1.课题概述通过MATLAB实现PID控制器,积分分离控制器以及滑模控制器。通过对比三个算法可知,采用滑模控制算法,其具有最快的收敛性能,较强的鲁棒性,以及较小的超调量。其性能略优于基于积分分离的PID控制器,远优于PID控制器的控制性能。2.系统仿真结果 (完整程序运行后无水…

LDM/SDM

LDM: 把图像VAE进隐空间,Diffusion加噪+UNetCrossAttn去噪,再VAE解码到像素空间输出按照时间t,进行不同程度和类型的去噪,所以加入了time-embedding。 把加入了conditional和未加入conditional的图片线性融合,保证平滑最前面接入resnet,是为了更好地保留中低级特征如边缘…

【漏洞分析】【CTF】Wiz Kubernetes CTF(K8s LAN Party)Writeup

目录入口Challenge 1 - ReconChallenge 2 - Finding NeighboursChallenge 3 - Data Leakage后记Challenge 4 - Bypass BoundariesChallenge 5 - Lateral Movement小结Reference 入口 https://www.k8slanparty.com/ Challenge 1 - Recon这道题的目的是想让你找到隐藏在K8s集群内…

【技术解读】【WebSec】Abusing HTTP hop-by-hop request headers

Abusing HTTP hop-by-hop request headers 这个技术在 2019年入选了 Portswigger 安全社区评选的 top 10 Web hacking techiniques of 2019 的候选名单,尽管最终没有入选 top 10,但个人觉得还是挺有意思的,后来也出现了与之相关的真实世界的漏洞案例,因此值得学习。 什么是…

【漏洞分析】CVE-2024-22243: Spring Framework URL Parsing with Host Validation

漏洞公告漏洞分析 从公告中可知该漏洞关键点在 UriComponentsBuilder 这个类。通过以前的Springboot工程全局搜索可知该类在于spring-web 这个jar包里。于是我们可以diff 下 spring-web 的 5.3.31 和 5.3.32 这两个版本的jar。可以看到,UriComponentsBuilder 类的改动只涉及…

【漏洞分析】CVE-2024-22259: Spring Framework URL Parsing with Host Validation (2nd report)

漏洞公告漏洞分析 这个漏洞本质上跟之前的CVE-2024-22243是同一个问题,且之前官方修复的不完全,导致还是可以被绕过。 这一点,官方在公告里也提到了。 补丁diff下,能看到其实还是url解析的那个正则表达式的修改: //5.3.31的正则: ^(([^:/?#]+):)?(//(([^@/?#]*)@)?(\…

用AOT导出本地dll

记得之前在做医保接口时,经常要调一些C++或delphi写的本地dll(这些dll通常是用来读医保卡之类),这里简单介绍一下用C#生成本地可以直接调用dll,具体做法是通过UnmanagedCallersOnlyAttribute来完成。dll项目文件如下<Project Sdk="Microsoft.NET.Sdk"><…

AOT反射库-AOTReflection

在AOT项目中,使用反射有一些问题,本程序包利用源生成器,按不同的维度,提前获取对应类型的元数据,从而达到平滑使用Reflection部分功能。项目:https://github.com/axzxs2001/AOTReflectionnuget:https://www.nuget.org/packages?q=AOTReflection如下面代码,利用泛型的反…

快乐地在AOT项目中用反射

反射是.NET开发的利器,但对于AOT来说,因为Native编译,所以反射的功能基本在AOT编译的项目中失效。办法总比困难多,这么好的东西不能扔掉,下面是“尽量”可以使用反射的例子,为什么“尽量”,看完下面的案例我们再做说明。在AOT项目中使用反射基本原理:利用源生成器,在b…