Skip to content

Web 术语

Cookie 是一种浏览器的缓存机制,在不同的域名下存储了不同的 cookie,当发送请求的时候会将该域名下的 cookie 存储的信息一起发送到服务器之之中。下面是一张浏览器存储 Cookie 的截图:

image-20250429150744738

Cookie 存储的一些元数据信息可以参考下表:

字段名是否必须示例值说明
Name=Value✅ 是login_user=TomatosCookie 的键值对内容,必须有,值是字符串
Path❌ 否/表示此 Cookie 对哪个路径有效,默认为当前路径
Domain❌ 否.example.com指定可以接收此 Cookie 的域名,默认是当前域
Expires❌ 否Wed, 01 May 2025 12:00:00 GMT设置 Cookie 的过期时间(绝对时间)
Max-Age❌ 否86400(单位:秒)设置 Cookie 的有效期(相对时间),优先于 Expires
Secure❌ 否无值(只要写上即可)表示此 Cookie 只会在 HTTPS 请求中发送
HttpOnly❌ 否无值表示此 Cookie 无法被 JavaScript 访问(如 document.cookie
SameSite❌ 否Strict / Lax / None控制跨站请求时是否携带 Cookie,用于防范 CSRF

**注:**Cookie 存储在浏览器(客户端)之中

Session

Session 是一种用于维持客户端与服务端会话的机制。

Session 的工作流程

  1. 客户端浏览器向服务端发起登录请求。
  2. 登录成功后,服务端将用户信息存储在服务器端,并生成一个唯一的 Session 标识符(由服务器决定是否唯一)。
  3. 服务端将该 Session 标识符返回给客户端,通常通过 Cookie 存储在客户端浏览器中。
  4. 客户端在后续请求中会携带该 Session 标识符,服务端通过标识符找到对应的会话信息。

TIP

Session 可以通过 Cookie 实现,也可以通过其他手段实现。
每个用户对应一个 Session,会话信息存储在服务端。

特性CookieSession
存储位置客户端浏览器服务器内存
安全性较低,可被客户端查看和修改较高,存储在服务器
生命周期可持久化存储默认为会话级,可配置超时时间
存储容量有限(通常 4KB)较大(受服务器内存限制)
性能每次请求都会传输只传输会话标识符
适用场景记住用户名、主题偏好等非敏感信息用户认证状态、购物车等敏感数据

Token

Token 是一种身份验证机制,常用于无状态的认证场景。它通过生成一个唯一的字符串来标识用户身份,避免了在每次请求中都需要存储和验证用户的会话信息。

Token 的工作流程

  1. 用户通过用户名和密码向服务器发起登录请求。
  2. 服务器验证用户信息,验证成功后生成一个 Token 并返回给客户端。
  3. 客户端将 Token 存储在本地(如 LocalStorage 或 SessionStorage)。
  4. 客户端在后续的每次请求中将 Token 放入请求头中(通常是 Authorization 字段)。
  5. 服务器通过解析 Token 验证用户身份并返回相应的资源。

Token 的特点

  • 无状态:服务器不需要存储用户的会话信息,减少了服务器的内存开销。
  • 跨平台:Token 可以在不同的客户端(如 Web、移动端)之间通用。
  • 安全性:通过加密算法生成,难以伪造,但需要注意 Token 的存储和传输安全。

常见的 Token 类型

  • JWT(JSON Web Token):一种常见的 Token 格式,由三部分组成:Header、Payload 和 Signature。它是自包含的,包含了用户的基本信息和签名。
  • OAuth Token:用于授权的 Token,常用于第三方应用访问用户资源。

Token 与 Session 的对比

特性TokenSession
存储位置客户端服务器内存
状态无状态有状态
安全性依赖加密和传输安全较高,存储在服务器
生命周期通常有过期时间会话级,可配置超时时间
适用场景分布式系统、跨平台认证单一服务器的用户会话管理

**注:**Token 的存储需要注意安全性,避免被恶意获取。

CSRF

跨站请求伪造(Cross-Site Request Forgery)

一个经典的 CSRF 例子如下:

  1. 用户 A 登录了银行相关网站,关闭了网站但是并没有退出用户

  2. 用户 A 访问了另一个钓鱼网站,其中有一个按钮伪装了一个段表单,表单指向你之前访问的银行相关网站

  3. 点击按钮后会携带你刚刚保存了 cookie,拿到 cookie 后可以通过里面存储的 session 唯一标识成功访问你之前登录的银行相关网站进行敏感的高危操作。

Last updated:

Released under the MIT License.