前端架构处理Cookie、Session、Token

news2024/11/27 15:40:47

1. Cookie 

Cookie 总是保存在客户端中。按在客户端中的存储位置,可分为内存 Cookie 和硬盘 Cookie。

内存 Cookie 由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的。硬盘 Cookie 保存在硬盘里,有一个过期时间。除非用户手工清理或到了过期时间,硬盘 Cookie 不会被删除,其存在时间是长期的。

1.1 Cookie 定义和作用

HTTP Cookie(也叫 Web Cookie 或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据。它会在浏览器下次向同一服务器再发起请求时,被携带并发送到服务器上。

通常 Cookie 用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。

Cookie 主要用于以下三个方面:

  • 会话状态管理(如用户登录状态、购物车等其它需要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)

1.2 服务端创建 Cookie

当服务器收到 HTTP 请求时,服务器可以在响应头里面添加一个 Set-Cookie 选项。

浏览器收到响应后通常会保存下 Cookie,之后对该服务器每一次请求中都通过 Cookie 请求头部将 Cookie 信息发送给服务器。另外,Cookie 的过期时间、域、路径、有效期、适用站点都可以根据需要来指定。

2. Session 方案

2.1 Session 机制的概念

如果说 Cookie 是客户端行为,那么 Session 就是服务端行为。

Cookie 机制在最初和服务端完成交互后,保持状态所需的信息都将存储在客户端,后续直接读取发送给服务端进行交互。

Session 代表服务器与浏览器的一次会话过程,并且完全由服务端掌控,实现分配ID、会话信息存储、会话检索等功能。

Session 机制将用户的所有活动信息、上下文信息、登录信息等都存储在服务端,只是生成一个唯一标识 ID 发送给客户端,后续的交互将没有重复的用户信息传输,取而代之的是唯一标识 ID,暂且称之为 Session-ID 吧。

2.2 简单的交互流程

  • 当客户端第一次请求 session 对象时候,服务器会为客户端创建一个 session,并将通过特殊算法算出一个 session 的 ID,用来标识该 session 对象;

  • 当浏览器下次请求别的资源的时候,浏览器会将 sessionID 放置到请求头中,服务器接收到请求后解析得到 sessionID,服务器找到该 id 的 session 来确定请求方的身份和一些上下文信息。

2.2 存在的问题

Session 信息是存储在服务端的,因此如果用户量很大的场景,Session 信息占用的空间就不容忽视。

对于大型网站必然是集群化&分布式的服务器配置。如果 Session 信息是存储在本地的,那么由于负载均衡的作用,原来请求机器 A 并且存储了 Session 信息,下一次请求可能到了机器 B,此时机器 B 上并没有 Session 信息。

这种情况下要么在 B 机器重复创建造成浪费,要么引入高可用的 Session 集群方案,引入 Session 代理实现信息共享,要么实现定制化哈希到集群 A,这样做其实就有些复杂了

4. Token 方案

Token 是令牌的意思,由服务端生成并发放给客户端,是一种具有时效性的验证身份的手段。

Token 避免了 Session 机制带来的海量信息存储问题,也避免了 Cookie 机制的一些安全性问题,在现代移动互联网场景、跨域访问等场景有广泛的用途。

4.1 简单的交互流程

  • 客户端将用户的账号和密码提交给服务器;

  • 服务器对其进行校验,通过则生成一个 token 值返回给客户端,作为后续的请求交互身份令牌;

  • 客户端拿到服务端返回的 token 值后,可将其保存在本地,以后每次请求服务器时都携带该 token,提交给服务器进行身份校验;

  • 服务器接收到请求后,解析关键信息,再根据相同的加密算法、密钥、用户参数生成 sign 与客户端的 sign 进行对比,一致则通过,否则拒绝服务;

  • 验证通过之后,服务端就可以根据该 Token 中的 uid 获取对应的用户信息,进行业务请求的响应。

4.2 Token 的设计思想

JSON Web Token(JWT)为例,Token主要由三部分组成:

  • Header 头部信息:记录了使用的加密算法信息;

  • Payload 净荷信息:记录了用户信息和过期时间等;

  • Signature 签名信息:根据 header 中的加密算法和 payload 中的用户信息以及密钥key来生成,是服务端验证服务端的重要依据。

header 和 payload 的信息不做加密,只做一般的 base64 编码。服务端收到 token 后剥离出 header 和 payload 获取算法、用户、过期时间等信息,然后根据自己的加密密钥来生成 sign,并与客户端传来的 sign 进行一致性对比,来确定客户端的身份合法性。

这样就实现了用 CPU 加解密的时间换取存储空间,同时服务端密钥的重要性就显而易见,一旦泄露整个机制就崩塌了,这个时候就需要考虑 HTTPS 了。

4.3 Token 方案的特点

  • Token 可以跨站共享,实现单点登录;

  • Token 机制无需太多存储空间。Token 包含了用户的信息,只需在客户端存储状态信息即可,对于服务端的扩展性很好;

  • Token 机制的安全性依赖于服务端加密算法和密钥的安全性;

参考原文:《Cookie、Session、Token 背后的故事》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot、Spring MVC热部署

一、相关概述 JVM能够识别的是字节码.class文件每次重新运行都是一个重新编译的过程,也就是说会生成新的target字节码文件;但是每次修改了代码之后也必须要重新运行,这样比较麻烦。热部署就能较好地解决该问题,直接刷新页面就可以…

(22)go-micro微服务kibana使用

文章目录一 kibana介绍二 Kibana主要功能三 Kibana侧边栏四 Kibana安装1.拉取镜像2.运行命令3.查看是否运行五 Kibana使用六 Kibana图形化界面七 最后一 kibana介绍 Kibana :是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作。Kibana 提供搜索、…

初识Nonebot2

文章目录什么是nonebot2?机器人工作流程WebSocket协议OneBot标准Nonebot2框架工作路径什么是nonebot2? 关于NoneBot2,我们先来引用一下官方文档的描述 NoneBot2是一个可扩展的 Python 异步机器人框架,它会对机器人收到的事件进行…

创建进度条 tqdm模块

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 创建进度条 tqdm模块 选择题 以下python代码最后输出错误的一项是? from tqdm import tqdm import time text{loss:0.2,learn:0.8} print(【开始执行】) for i in tqdm(range(50)…

python图像处理(图像缩放)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 图像缩放也是isp处理的一个基本功能。现在的camera像素越来越大,但是显示设备的分辨率是一定的,如果想把图像显示在显示器或者lcd上面,那就要符合对应显示设备的分辨率。一般来说…

【数据结构与算法理论知识点】5、图与贪心算法

5、图与贪心算法 逻辑结构 5.1、图的定义和术语 图:Graph(V,E) V:顶点(数据元素)的有穷非空集合; E:边的有穷集合。 **无向图:**每条边都是无方向的 有向图:每条边都是有方向的 完全图:任意两个点都有一条边相连 稀疏图:有很…

SSM 农产品销售管理系统

SSM 农产品销售管理系统 SSM 农产品销售管理系统 功能介绍 首页 用户登录注册 图片轮播 最新上架 农产资讯 产品商城 产品详情 在线留言 加入购物车 提交购买 评论 收藏 系统简介 系统公告 关于我们 友情链接 后台管理 登录 系统用户管理 修改密码 用户权限管理 产品信息管理…

Hadoop基础之《(4)—Yarn概述》

一、什么是Yarn YARN(Yet Another Resource Negotiator),简称YARN,另一种资源协调者,是Hadoop的资源管理器。 二、Yarn的组成 Yarn有两个核心组件,ResourceManager和NodeManager。 1、ResourceManager&am…

UE Operation File [ Read / Write ] DTOperateFile 插件说明

蓝图直接操作文件的功能节点 可以获取文件基本信息以及读写文件 目录 1. File Exists 2. File Size 3. File Delete 4. File Is Read Only 5. File Move 6. File Save By String 7. File Save By Array String 8. File Save By Array Binary 9. File Append By Strin…

Jenkins(一):什么是Jenkins?

目录 一、Jenkins是什么? 二、安装步骤 1.访问官网,下载安装包 2.解锁Jenkins 3.设置Jenkins的工作目录(可选) 总结 前言 近期在研究自动化部署,在这里对Jenkins做个笔记。 一、Jenkins是什么? Jenk…

数据挖掘,计算机网络、操作系统刷题笔记36

数据挖掘,计算机网络、操作系统刷题笔记36 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,orac…

泊松过程与排队论

全国同理:随机过程随机会过 ......唉 你说热统,他为什么要搭配着随机过程一起学 ......唉 你说数模比赛 为什么不能白送一个奖牌小摘要泊松过程泊松过程来到间隔与等待时间的分布来到时刻的条件分布M/G/1 忙期非齐次泊松过程复合泊松过程条件泊松过程排队系统输入常见的输入分布…

Python eval()和exec()函数详解

eval() 和 exec() 函数都属于 Python 的内置函数,由于这两个函数在功能和用法方面都有相似之处,所以将它们放到一节进行介绍。eval() 和 exec() 函数的功能是相似的,都可以执行一个字符串形式的 Python 代码(代码以字符串的形式提…

Elasticsearch:深入理解 Elasticsearch 查询:过滤器查询 vs 全文搜索

如果我必须用一句话来描述 Elasticsearch,我会这样说: 当搜索遇到大规模分析时(近乎实时) Elasticsearch 是目前最受欢迎的 10 大开源技术之一。 公平地说,它包含许多本身并不独特的关键功能,但是&#xff…

ARP渗透与攻防(八)之ARP攻击防御

系列文章 ARP渗透与攻防(一)之ARP原理 ARP渗透与攻防(二)之断网攻击 ARP渗透与攻防(三)之流量分析 ARP渗透与攻防(四)之WireShark截获用户数据 ARP渗透与攻防(五)之Ettercap劫持用户流量 ARP渗透与攻防(六)之限制网速攻击 ARP渗透与攻防(七)之Ettercap Dns劫持 ARP攻击防御 …

【Linux】调试器-gdb使用

一、背景 程序的发布方式有两种,debug模式和release模式Linux gcc/g出来的二进制程序,默认是release模式要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项 当我们不加 -g 选项的时候,我们生成的可执行文件的相关符…

python刷题-关于分词词频、数组排序,数组插数的题

目录标题1、对多种日期格式进行标准化2、实现英文分词计算词频-re.split、value_counts()3、中文文章分词4、统计《鹿鼎记》小说中的人名5、用1234能组成多少个互不相同且无重复数字的三位数6、两个矩阵相加7、用逗号分隔列表-join8、在升序的序列中插入一个数---重要9、对任意…

带滤波器的PID控制仿真-3(Simulink仿真)

在带滤波器的PID控制仿真-2的基础上对算例进行Simulink仿真。控制器采用积分分离PI控制,即当误差的绝对值小于等于0.80时,加入积分控制,仿真结果如图1和2所示。图1 加入滤波器时PID控制阶跃响应图2 无滤波器时PID控制阶跃响应初始化程序&…

03-你能不能自己写一个叫做java.lang.Object的类?

前言: 接着上一次02-为什么dex文件比class文件更适合移动端?的继续往下,距离上一篇已经过去快半年了,从我的博文记录中就可以清楚地看到: 转眼2023年新春假期接近尾声了,在这近半年的时间里,其…

2023英伟达显卡排名天梯图(已更新)

2023英伟达显卡排名天梯图 注意 这里没有更新4070Ti, 它的性能应该在3090和3090ti之间 Kelvin Kelvin 于 2001 年发布,是 Nvidia 千年以来第一个新的 GPU 微架构。最初的 Xbox 游戏机使用带有 Kelvin 微架构的 NV2A GPU。 GeForce 3 和 GeForce 4 系列 GPU 是采用…