cookie、session、token

cookie

纳入标准文档,标准浏览器需要遵守的协议之一,作为标准浏览器必须支持的。

WEB应用都是基于HTTP协议,标准的HTTP协议是无状态的。

什么是无状态?

不管是谁,不管是从哪个地方发起的请求。只要你的请求(URL:包括了域名甚至包括了具体的文件【当然也有缺省的情况 ,即默认访问】)是一样的,你拿到的结果【响应】永远是一样的。

这样就导致了一些需求无法完成,比如:

我想让第一次访问该页面的用户,给他重定向到welcome页面接着是它想访问的页面,而之后继续访问该页面【第二次及以后】,则不会去访问welcome页面。

这种根据用户访问次数来做的需求就无法实现。

因此我们提出了cookie的概念。

由于HTTP本身是无状态的,那么我就把状态本身附加到响应头head中

同时这个cookie是符合HTTP标准协议里面的,即任何一个标准的浏览器都应该支持这个功能。当我们服务器在响应的时候,只要我们设置一个响应的字段“set-cookie”。

浏览器在收到响应之后,如果它发现响应头里面有“set-cookie”字段,那么浏览器就会把对应的key-value保存在浏览器里面,并且以后浏览器向同一个域名发起请求的时候,浏览器是会携带这个cookie【放在请求头中】

虽然HTTP本身是无状态的,但服务器把需要的状态以cookie的形式返回给浏览器,让浏览器来帮忙。服务器后续想更新这个cookie也是同样在响应头进行更新及扩充。

cookie的不足

我们会发现这些cookie都是明文暴露在外面的,泄漏了很多后台管理的状态,使得它有一定的安全问题,甚至一些企业中的安全策略(内网)会把cookie给禁掉。

2、引入了session

session

通过后台来保存这些状态,保存完之后为了区分不同的session,起名为session上下文(每个上下文有一个对应的sessionID),然后我们只把sessionID通过cookie返回回去。这样浏览器拿到的也就只有sessionID,很大程度避免了信息的泄漏。

session的不足

当一个服务是多地部署的,这样当两次请求发给的是不同的服务器,如:第一次发给了北京的服务器,而第二次发给了上海的服务器,在第二次的时候只拿到了sessionID,而没有session上下文,于是就需要回到北京的服务器去查。造成了性能的开销。

token

后端把需要保存的内容不保存在服务器里【当然也可以在服务器中拷贝一份】,后端将(session)上下文的状态打包成token,同时把token做加密,我只认token不认人。交给【返回给】前端,前端在发后续请求的时候把token和请求发给后端,后端收到请求之后把

token解包  -->

可以看到token里面的内容【前端一般不会主动去打开token】。对于分布式服务器,服务相同的一个session请求的时候,如果连续两次请求的是不同地段的服务器,我也不需要去查之前的服务器了,因为上下文的状态全保存在token中。

当设置token的时候,可以通过secret进行加密,也可以设置过期时间。

当后端进行校验工作确认信息没问题的时候,根据业务把相关信息进行打包,将token返回给前端,当前端拿到token的时候也只是拿到了一个令牌【前端是解不开的,因为我们正常是不会把secret传给前端】,在下次发请求的时候,会把token放入请求头里【的authorization】,发给后端。

token不是标准协议的内容,完全是前后端之间自己去定义、协商的。通常都是把token放入请求头里,和请求一起发过来,在拿到token之后去验证它:

验证secret对不对(签名),是否过期。当不满足上述条件,则直接返回401

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

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

相关文章

openssl 生成证书步骤

本地测试RSA非对称加密功能时,需要用到签名证书。本文记录作者使用openssl本地生成证书的步骤,并没有深入研究openssl,难免会有错误,欢迎指出!!! 生成证书标准流程: 1、生成私钥&am…

【Linux】Linux——Centos7安装RabbitMQ

目录 安装包准备socaterlang 安装rabbitmq安装命令启动rabbitmq,两种方式查看rabbitmq 启动后的情况配置并开启网页插件关闭防火墙或开放端口测试登录问题配置web端访问账号密码和权限添加用户,后面两个参数分别是用户名和密码.添加权限修改用户角色再次…

单片机的中断

1. 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置 当中央处理机CPU正在处理某件事的时候外界发生紧急事件请求,要CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来中断的地方,继续原…

C语言22行代码,让你的朋友以为中了病毒

1 **C语言介绍 ** C语言是一种计算机编程语言,由丹尼斯里奇(Dennis Ritchie)在1972年左右为UNIX操作系统设计并开发。它具有高效、可移植、灵活和强大的特点,在计算机科学领域中具有广泛的应用。C语言是一种结构化语言&#xff0…

电子硬件设计-Xilinx FPGA/SoC前期功耗评估方法(1)

目录 1. 简介 2. 使用方法 2.1 设计输入 2.2 查看结果 3. 额外说明 4. 总结 1. 简介 XPE (Xilinx Power Estimator, 功耗估算器) 电子表格是一种功耗估算工具,用于项目的预设计和预实现阶段。 该工具可以帮助工程师进行架构评估、器件选择、合适的电源组件以…

官方文档k8s1.30安装部署高可用集群,kubeadm安装Kubernetes1.30最新版本

文章目录 节点架构一、准备开始(每一台机器都执行)1️⃣ 检查所需端口(可以直接关闭防火墙放开所有端口)端口和协议控制面工作节点 关闭防火墙关闭 SELinux 2️⃣ 安装containerd容器containerd部署containerd切换为国内源 3️⃣ 设置/etc/hosts 二、安装 kubeadm、kubelet 和 …

安卓开发--环境配置

本次项目选择使用 Andrio Studio 进行开发。虽然这款软件版本更新也很快。不过开发一款APP的技术流程是大差不差的。我几年前的安卓笔记放到现在还是能用。 现在CSDN网上写一个笔记留作以后参考,开始吧!!! 1 安装 Andrio Studio …

npm 安装 pnpm 时 报错 npm ERR! Unexpected token ‘.‘

问题 一个项目用的是 pnpm 安装的依赖,node 的版本是 16.16.0,nvm 的版本是 1.1.7,然后全局安装 pnpm 报错如下: 解决 我看网上的一些解决方案是说 nvm 版本过低导致,下面我们按照这个方向处理。 实首先下载 nvm-up…

使用凌鲨建立软件研发技能学习小组

凌鲨(OpenLinkSaas)的团队功能除了提供论坛功能,还能记录团队成员的成长记录。 使用方法 打开团队功能 团队功能在默认情况下是关闭的,你可以在登录后打开团队功能开关。 创建学习团队 日报/周报/个人目标一般是企业团队需要,建议关闭。 …

Shell生成支持x264的ffmpeg安卓全平台so

安卓 FFmpeg系列 第一章 Ubuntu生成ffmpeg安卓全平台so 第二章 Windows生成ffmpeg安卓全平台so 第三章 生成支持x264的ffmpeg安卓全平台so(本章) 文章目录 安卓 FFmpeg系列前言一、实现步骤1、下载x264源码2、交叉编译生成.a3、加入x264配置4、编译ffmp…

Redis 哨兵机制

文章目录 哨兵机制概念相关知识铺垫主从复制缺陷哨兵工作流程选举具体流程理解注意事项 哨兵机制概念 先抽象的理解,哨兵就像是监工,节点不干活了,就要有行动了。 Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务&#…

MVC WebAPI

创建项目 创建api控制器 》》》 web api 控制器要继承 ApiController 》》》 数据会自动装配 及自动绑定 》》》清除xml返回格式 //清除XML返回格式 GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 》》》跨越问题

【汇编语言小练习输入两个数字然后输出它们的和】

这个程序是用汇编语言编写一个简单的程序,它将从键盘输入两个数字,然后输出它们的和。 .MODEL SMALL .STACK 100H.DATAINPUT_MSG1 DB Enter the first number: $INPUT_MSG2 DB 13, 10, Enter the second number: $RESULT_MSG DB 13, 10, The sum is: $N…

2024服贸会,参展企业媒体宣传报道攻略

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 2024年中国国际服务贸易交易会(简称“服贸会”)是一个重要的国际贸易平台,对于参展企业来说,有效的媒体宣传报道对于提升品牌知名度、扩大…

FPGA第二篇,FPGA与CPU GPU APU DSP NPU TPU 之间的关系与区别

简介:首先,FPGA与CPU GPU APU NPU TPU DSP这些不同类型的处理器,可以被统称为"处理器"或者"加速器"。它们在计算机硬件系统中承担着核心的计算和处理任务,可以说是系统的"大脑"和"加速引擎&qu…

社区奶柜:小本创业,大有可为

社区奶柜:小本创业,大有可为 在快节奏的现代生活中,人们对健康、便捷生活方式的追求日益增长。社区奶柜加盟项目,正是应运而生,它不仅满足了居民对于新鲜、营养乳制品的日常需求,也为寻求创业机会的您铺设…

excel中图片url转为jpg

步骤 打开Excel,并按下 Alt F11 打开VBA编辑器。在VBA编辑器中,插入一个新的模块(右键点击项目资源管理器中的模块 -> 插入 -> 模块)。在新模块的代码窗口中,复制并粘贴以下示例代码。根据需要修改代码中的变量…

力扣2105---给植物浇水II(Java、模拟、双指针)

题目描述: Alice 和 Bob 打算给花园里的 n 株植物浇水。植物排成一行,从左到右进行标记,编号从 0 到 n - 1 。其中,第 i 株植物的位置是 x i 。 每一株植物都需要浇特定量的水。Alice 和 Bob 每人有一个水罐,最初是…

AS01_BAPI:BAPI_FIXEDASSET_OVRTAKE_CREATE_创建资产主数据

AS01_创建资产主数据 一、功能介绍 使用事务码AS01创建资产主数据 二、程序代码 程序代码: REPORT zfir002.TYPE-POOLS: slis, icon. TYPES: BEGIN OF ty_file,zanln TYPE anla-anln1, "资产编号anln2 TYPE anla-anln2, "资产次级编号bukrs …

FastAPI vs Flask: 选择最适合您的 Python Web 框架

文章目录 1. 简介2. 安装和设置3. 路由和视图4. 自动文档生成5. 数据验证和序列化6. 性能和异步支持结论 在 Python Web 开发领域,FastAPI 和 Flask 是两个备受欢迎的选择。它们都提供了强大的工具和功能,但是在某些方面有所不同。本文将比较 FastAPI 和…