前端会话控制技术:cookie/session/token

目录

  • 前端中的 Cookie、Session 和 Token:详解与应用
    • 1. Cookie
      • 1.1 什么是 Cookie?
      • 1.2 Cookie 的工作原理
      • 1.3 Cookie 的特点
      • 1.4 Cookie 的用途
      • 1.5 Cookie 的安全性
    • 2. Session
      • 2.1 什么是 Session?
      • 2.2 Session 的工作原理
      • 2.3 Session 的特点
      • 2.4 Session 的用途
      • 2.5 Session 的安全性
    • 3. Token
      • 3.1 什么是 Token?
      • 3.2 Token 的工作原理
      • 3.3 Token 的特点
      • 3.4 Token 的用途
      • 3.5 Token 的安全性
    • 4. Cookie、Session 和 Token 的对比
    • 5.补充说明
      • 5.1 token的无状态是什么意思
        • 无状态的优势
        • 实际应用示例
    • 6. 如何选择?

前端中的 Cookie、Session 和 Token:详解与应用

在前端开发中,管理用户状态和实现身份验证是至关重要的任务。为了实现这些功能,开发者通常会使用 CookieSessionToken 这三种机制。它们各有特点,适用于不同的场景。本文将深入探讨它们的定义、工作原理、优缺点以及实际应用。


1. Cookie

在这里插入图片描述

1.1 什么是 Cookie?

Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据(通常小于 4KB)。浏览器会在后续请求中自动将 Cookie 发送回服务器。

1.2 Cookie 的工作原理

  1. 服务器通过 HTTP 响应头的 Set-Cookie 字段将 Cookie 发送给浏览器。
  2. 浏览器保存 Cookie,并在后续请求中通过 Cookie 请求头将其发送回服务器。
  3. 服务器根据 Cookie 的内容识别用户或会话状态。

1.3 Cookie 的特点

  • 存储位置: 客户端(浏览器)。
  • 生命周期: 可以设置过期时间(会话 Cookie 或持久 Cookie)。
  • 自动发送: 每次请求都会自动发送到服务器。
  • 大小限制: 单个 Cookie 通常不超过 4KB,每个域名下的 Cookie 数量也有限制。

1.4 Cookie 的用途

  • 会话管理: 如保存登录状态、购物车信息。
  • 个性化设置: 如用户的语言偏好、主题设置。
  • 行为跟踪: 如广告投放、用户行为分析。

1.5 Cookie 的安全性

  • 优点: 简单易用,适合存储少量非敏感数据。
  • 缺点: 容易受到 CSRF(跨站请求伪造)和 XSS(跨站脚本攻击)的威胁。
  • 防护措施:
    • 使用 HttpOnly 属性防止 JavaScript 访问。
    • 使用 Secure 属性确保仅通过 HTTPS 传输。
    • 使用 SameSite 属性防止跨站请求伪造。

2. Session

2.1 什么是 Session?

Session 是服务器端存储的用户会话数据,通常与一个唯一的 Session ID 关联。Session ID 通过 Cookie 或 URL 传递给客户端。

2.2 Session 的工作原理

  1. 用户登录后,服务器创建一个 Session 并生成唯一的 Session ID。
  2. 服务器将 Session ID 通过 Cookie 或 URL 传递给客户端。
  3. 客户端在后续请求中发送 Session ID,服务器根据 ID 查找对应的 Session 数据。

2.3 Session 的特点

  • 存储位置: 服务器端(如内存、数据库)。
  • 生命周期: 会话结束时销毁,或根据设置的时间过期。
  • 依赖 Cookie: 通常通过 Cookie 传递 Session ID。

2.4 Session 的用途

  • 用户状态管理: 如保存登录状态、用户权限。
  • 临时数据存储: 如表单数据、购物车信息。

2.5 Session 的安全性

  • 优点: 敏感数据存储在服务器端,不易被客户端篡改。
  • 缺点: 需要服务器维护会话状态,可能影响扩展性。
  • 防护措施:
    • 使用 HTTPS 加密传输。
    • 定期清理过期 Session。

3. Token

3.1 什么是 Token?

Token 是一种用于身份验证和授权的令牌,通常采用 JSON Web Token (JWT) 格式。Token 包含用户信息、签名和过期时间等数据。

3.2 Token 的工作原理

  1. 用户登录后,服务器生成一个 Token 并返回给客户端。
  2. 客户端将 Token 存储在 LocalStorage、SessionStorage 或 Cookie 中。
  3. 客户端在后续请求中通过 Authorization 请求头发送 Token。
  4. 服务器验证 Token 的合法性并处理请求。

3.3 Token 的特点

  • 存储位置: 客户端(如 LocalStorage、SessionStorage 或 Cookie)。
  • 自包含: 包含用户信息和签名,无需服务器存储。
  • 手动发送: 需要手动附加到请求头。

3.4 Token 的用途

  • 无状态身份验证: 如 RESTful API。
  • 跨域认证: 如单点登录(SSO)。

3.5 Token 的安全性

  • 优点: 无状态,适合分布式系统;支持跨域认证。
  • 缺点: 需要妥善存储,防止 XSS 攻击。
  • 防护措施:
    • 使用 HTTPS 加密传输。
    • 避免将 Token 存储在 LocalStorage 中,防止 XSS 攻击。

4. Cookie、Session 和 Token 的对比

特性CookieSessionToken (JWT)
存储位置客户端(浏览器)服务器端客户端(LocalStorage 等)
数据传输自动通过 Cookie 头发送通过 Session ID手动附加到请求头
安全性较低(易受 CSRF 攻击)较高较高(依赖加密算法)
扩展性较好较差(需服务器存储)较好(无状态)
适用场景会话管理、个性化服务器端状态管理无状态认证、跨域认证

5.补充说明

5.1 token的无状态是什么意思

Token 的无状态(stateless)指的是服务器端不需要存储 token 或与之相关的会话信息。这个特性是 token(尤其是 JWT)的一个重要优势,具体含义如下:

  • 服务器不保存会话数据:传统的 session 认证方式中,服务器需要在内存或数据库中保存每个用户的会话状态。而使用 token 时,服务器不需要保存任何会话状态。
  • 自包含信息:token(如 JWT)本身包含了所有必要的信息,比如用户 ID、权限、过期时间等。这些信息经过加密签名,确保不被篡改。
  • 独立验证:服务器只需验证 token 的签名是否有效,而不需要查询数据库或存储系统来验证用户身份。
无状态的优势
  • 可扩展性:由于不需要在服务器存储会话信息,系统更容易水平扩展。多台服务器可以独立处理请求,不需要共享会话存储。

  • 减轻服务器负担:不需要为每个用户维护状态,降低了服务器的内存占用和数据库查询。

  • 适合微服务架构:不同的微服务可以独立验证 token,不需要共享会话状态。

  • 跨域支持:由于不依赖于 cookie,更容易实现跨域认证。

实际应用示例

假设用户登录后,服务器生成一个包含用户 ID 和权限的 JWT:

// JWT 的结构(简化示例)
{"header": { "alg": "HS256", "typ": "JWT" },"payload": {"userId": "12345","role": "admin","exp": 1647609600  // 过期时间戳},"signature": "..." // 使用密钥签名的数据
}

当用户发送后续请求时:

  1. 用户在请求头中携带此 token
  2. 服务器接收请求,验证 token 的签名
  3. 如果签名有效且未过期,则从 token 中直接提取用户信息
  4. 服务器不需要查询数据库就能知道这是用户 12345,拥有管理员权限

整个过程中,服务器不需要存储任何与此 token 相关的信息,所有需要的数据都包含在 token 本身中,这就是所谓的"无状态"。

6. 如何选择?

  • Cookie: 适合需要自动发送数据的场景(如登录状态、跟踪)。
  • Session: 适合需要服务器端存储敏感数据的场景(如用户权限、临时数据)。
  • Token: 适合无状态、跨域的场景(如 RESTful API、单点登录)。
    在实际开发中,可以根据需求选择单一机制或结合使用。例如,用 Cookie 存储 Token,既能利用 Cookie 的自动发送特性,又能享受 Token 的无状态优势。

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

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

相关文章

MATLAB实现基于“蚁群算法”的AMR路径规划

目录 1 问题描述 2 算法理论 3 求解步骤 4 运行结果 5 代码部分 1 问题描述 移动机器人路径规划是机器人学的一个重要研究领域。它要求机器人依据某个或某些优化原则 (如最小能量消耗,最短行走路线,最短行走时间等),在其工作空间中找到一…

Shopify Checkout UI Extensions

结账界面的UI扩展允许应用开发者构建自定义功能,商家可以在结账流程的定义点安装,包括产品信息、运输、支付、订单摘要和Shop Pay。 Shopify官方在去年2024年使用结账扩展取代了checkout.liquid,并将于2025年8月28日彻底停用checkout.liquid…

电阻的阻值识别

电阻买回来是有偏差的,不同的电阻种类,它的偏差大小会不一样,偏差越小的肯定越贵 主要看要求的精度要求是否越高 色环电阻或者说插件电阻 用来读数的几个色环它是比较靠近的,精度的色环跟用来读数的几个色环的间距会大一点点。 间…

quartz.net条件执行

quartz.net条件执行 在使用Quartz.NET时,你可能需要基于某些条件来决定是否执行一个任务。Quartz.NET本身并不直接支持基于条件执行任务的功能,但你可以通过一些策略来实现这一需求。下面是一些方法来实现基于条件的任务执行: 1. 使用触发器…

计算机操作系统(四) 操作系统的结构与系统调用

计算机操作系统(四) 操作系统的结构与系统调用 前言一、操作系统的结构1.1 简单结构1.2 模块化结构1.3 分层化结构1.4 微内核结构1.5 外核结构 二、系统调用1.1 系统调用的基本概念1.2 系统调用的类型 总结(核心概念速记)&#xf…

NSSCTF(MISC)——[SUCTF 2018 招新赛]single-dog

相应的做题地址:https://www.nssctf.cn/problem/2324 分离图片 在1.txt中得到一段颜文字 http://www.hiencode.com/aaencode.html 解密得到flag

低功耗蓝牙(BLE)方案设计实战指南

一、BLE方案设计工具链 1. 硬件选型与开发平台 TI平台:CC2540/CC2541芯片,使用SmartRF Flash Programmer烧录Nordic平台:nRF51822芯片,使用nRFgo Studio管理协议栈常用调试工具:TI CC Debugger、J-Link(SW…

网络基础(一)

独立模式与网络互联 独立模式: 计算机之间相互独立。 网络互联:多台计算机连接在一起,完成数据共享。 注意:无论是主机内还是主机外,都是通过线来进行连接的,主机内线(线比较短)的连接主要考虑…

用Canvas 画布样式实现旋转的阴阳图

用Canvas 画布样式实现旋转的阴阳图 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Canvas八卦图动画</title><style>/* 重置所有元素的默认样式 */* {padding: 0;margin: 0;box-sizin…

第16届蓝桥杯单片机4T模拟赛三

本次模拟赛涉及的模块&#xff1a;基础三件套&#xff08;Led&Relay&#xff0c;按键、数码管&#xff09; 进阶单件套&#xff08;pcf8591的AD模块&#xff09; 附件&#xff1a; 各模块底层代码在文章的结尾 一、数码管部分 1.页面1 页面1要显示的格式是&#xff1a; …

优选算法的睿智之林:前缀和专题(一)

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 目录 一、前缀和 二、例题讲解 2.1. 一维前缀和 2.2. 二维前缀和 2.3. 寻找数组的中心下标 2.4. 除自身以外数组的乘积 一、前缀和 前缀和算法是一种用于处理数组或序列数据的算法&#xff0c;其核心思想是…

瑞萨RX23E系列开发(二)建立工程

新建工程 使用倒数第二个模板 选择路径 我这里是这个型号。根据型号选择芯片 第一次需要下载FIT

【算法day19】括号生成——数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

括号生成 https://leetcode.cn/problems/generate-parentheses/description/ 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 左括号数必须大于右括号数&#xff0c;且小于等于n class Solution { publ…

Apache Doris学习

https://doris.apache.org/zh-CN/docs/gettingStarted/what-is-apache-doris 介绍 Apache Doris 是一款基于 MPP 架构&#xff08;大规模并行处理&#xff09;的高性能、实时分析型数据库。它以高效、简单和统一的特性著称&#xff0c;能够在亚秒级的时间内返回海量数据的查询…

基于springboot的新闻推荐系统(045)

摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了新闻推荐系统的开发全过程。通过分析企业对于新闻推荐系统的需求&#xff0c;创建了一个计算机管理新闻推荐系统的方案。文章介绍了…

Jboss漏洞再现

一、CVE-2015-7501 1、开环境 2、访问地址 / invoker/JMXInvokerServlet 出现了让下载的页面&#xff0c;说明有漏洞 3、下载ysoserial工具进行漏洞利用 4、在cmd运行 看到可以成功运行&#xff0c;接下来去base64编码我们反弹shell的命令 5、执行命令 java -jar ysoserial-…

(二)VMware:VMware虚拟机安装CentOS教程

目录 1、准备CentOS 7镜像1.1、官网镜像下载1.2、清华大学开源镜像下载​1.3、阿里云开源镜像下载 2、使用 VMware安装CentOS 72.1、创建虚拟机2.2、选择自定义安装2.3、硬件兼容性&#xff0c;保持默认2.4、选择下载的ISO镜像2.5、设置虚拟机名称以及存放磁盘位置2.6、按照需求…

哈尔滨工业大学DeepSeek公开课人工智能:从图灵测试到DeepSeek|附视频和PPT下载方法

导 读 INTRODUCTION 今天给大家分享一份哈尔滨工业大学发布的《从图灵测试到DeepSeek》&#xff0c;由哈尔滨工业大学人工智能学院执行院长兼计算学部副主任张伟男教授带你穿越AI发展简史&#xff0c;解锁从图灵测试的奠基性思想到DeepSeek大模型的技术突破&#xff0c;带你领…

【算法笔记】图论基础(一):建图、存图、树和图的遍历、拓扑排序、最小生成树

目录 何为图论图的概念 图的一些基本概念有向图和无向图带权图连通图和非连通图对于无向图对于有向图 度对于无向图对于有向图一些结论 环自环、重边、简单图、完全图自环重边简单图 稀疏图和稠密图子图、生成子图同构 图的存储直接存边邻接矩阵存边邻接表存边链式前向星存边 图…

vue 对接 paypal 订阅和支付

一个是支付一个是订阅&#xff0c;写的时候尝试把他们放到一个里面&#xff0c;但是会报错&#xff0c;所以分开写了 我们的页面&#xff0c;前三个为订阅最后一个是支付&#xff0c;我把他们放到一个数组里面循环展示的&#xff0c;所以我们判断的时候只要判断id是否为4&#…