什么是 Token,Cookie,Session
Posted on Wed, 25 Dec 2024 10:34:06 +0800 by LiangMingJian
什么是 Token,Cookie,Session
概述
在 HTML 或 HTTP 请求中,我们往往会听到 Token,Cookie 和 Session 这样的字眼。
这些字眼我们模糊的知道都是一些可以用来识别用户身份的工具。但这些工具究竟是什么?它们的差别究竟在哪里?这就是下面文章所要介绍的。
会话跟踪
要了解上述所说的字眼,我们先要了解什么是会话和会话跟踪?
- 会话:指一个用户登录网站后的一系列动作,比如登录网站,然后在网站进行搜索。
- 会话跟踪:指记录或保存用户在会话中的数据和操作,追踪用户的整个会话。
我们为什么要进行会话跟踪?
众所周知,HTTP 是一个无状态的协议,HTTP 请求在完成发送并接受响应后,服务器便会和客户端会话断开连接。此时,服务器显然不能对这个会话再进行跟踪了,因为连接已经断开了。
如果不能进行会话跟踪,则用户在结束当前会话后,下次重新开启会话时,可能出现:需要重新进行登录,保存的数据丢失,搜索历史丢失等一系列问题。这是因为缺乏会话跟踪,导致服务器无法识别这个会话是哪一位用户的,进而无法提取用户数据的问题。
因此,为了实现服务器和客户端的会话跟踪,Token,Cookie 和 Session 这些工具就显得很有必要了。
什么是 Token
Token 是一个通用概念,简单来说就是一个通行证,用来协助服务器识别用户。
Token 本质是服务端生成的一串字符串。当第一次登录后,服务器会生成一个 Token,然后将此 Token 返回给客户端,将其作为客户端登录后的唯一标识。之后客户端只需带上这个 Token 来请求数据即可,无需再次带上用户名和密码。
服务器根据这个 Token,识别这个访问的用户是谁,然后提取这个用户的数据,进行会话跟踪。
现在通用的 Token 方案是 JWT(JSON Web Token),通过一个编码的 JSON 数据来传递用户数据。

什么是 Cookie
既然我们知道服务器通过 Token 来识别用户进行会话跟踪,那么这个 Token 就肯定需要存放在客户端和服务器端。
客户端通过 Cookie 存放 Token 和会话相关的数据。
Cookie 是由 W3C 组织提出的,保存在客户端本地的一个小型 ASCII 文本,大小小于等于 4KB。因此 Cookie 通常只保存一些会话相关的重要数据以及 Token。
Cookie 具有不可跨域性,不同域名(网址)的网站的 Cookie 不可混用,也不可以互相访问。
什么是 Session
服务器端通过 Session 存放 Token 和会话相关的数据。
Session 是服务器上用来记录用户状态的一种机制。客户端在访问服务器时,服务器把客户端信息以某种形式(可以是文件,可以是 JSON,也可以记录在数据库)记录在服务器上。
Session 在用户第一次访问服务器时自动创建,客户端再次访问时,服务器只需从 Session 中查找对应数据就可以了。
客户端和服务端一般通过一个 SessionID 来进行沟通,为了防止不同的用户之间出现冲突和重复。这个 SessionID 可以通过 Token 进行传输。
关键差异
| 维度 | Cookie | Token | Session |
|---|---|---|---|
| 存储位置 | 浏览器 | 客户端或服务器 | 服务器 |
| 功能 | 识别用户并跟踪行为 | 验证用户身份 | 维护用户会话状态 |
| 数据类型 | ASCII 文本(≤4KB) | 字符串 | 任意类型 |
| 有效期 | 可长期保存 | 可自定义 | 可自定义 |
| 安全性 | 较低(可能被窃取) | 较高(数据加密) | 较高(数据在服务器) |