cookie、session、token

news/2024/10/18 10:16:48/

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.ppmy.cn/news/1450088.html

相关文章

【算法题解】部分洛谷题解(上)

前言 本篇为我做过的洛谷题的部分题解,大多是我认为比较具有代表性的或者比较有意思的题目,包含我自己的思考过程和想法。 [NOIP2001 提高组] 数的划分 题目描述 将整数 n n n 分成 k k k 份,且每份不能为空,任意两个方案不相…

【跟马少平老师学AI】-【神经网络是怎么实现的】(八)循环神经网络

一句话归纳: 1)词向量与句子向量的循环神经网络: x(i)为词向量。h(i)为含前i个词信息的向量。h(t)为句向量。 2)循环神经网络的局部。 每个子网络都是标准的全连接神经网络。 3)对句向量增加全连接层和激活函数。 每个…

使用 Docker 在 PyTorch 环境中训练模型

文章目录 准备工作构建 Docker 镜像运行 Docker 容器总结 在机器学习和深度学习任务中,使用 Docker 可以方便地构建和管理环境,特别是在涉及到复杂的依赖关系和 GPU 加速的情况下。本文将介绍如何使用 Docker 构建一个 PyTorch 环境,并在其中…

配置mac终端颜色

一个很优秀的参考文章 点击这里 这里还有一个开源的配置方案 点击这里 配置过程 第一步 git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh第二步 export ZSH"$HOME/.dotfiles/oh-my-zsh"; sh -c "$(curl -fsSL https://raw.githubuse…

银行卡归属地查询API接口快速对接

银行卡归属地查询API接口指的是通过银行卡号查询该银行卡详细信息,包括银行卡名称、卡种、卡品牌、发卡行、编号以及归属地等信息,支持一千多家银行返回归属地信息,那么银行卡归属地查询API接口如何快速对接呢? 首先找到有做银行…

自动驾驶系统中的端到端学习

资料下载-《自动驾驶系统中的端到端学习(2020)》https://mp.weixin.qq.com/s/ttNpsn7qyVWvDMZzluU_pA 近年来,卷积神经网络显著提高了视觉感知能力。实现这一成功的两个主要因素是将简单的模块组合成复杂的网络和端到端的优化。然而&#xf…

Web,Sip,Rtsp,Rtmp,WebRtc,专业MCU融屏视频混流会议直播方案分析

随着万物互联,视频会议直播互动深入业务各方面,主流SFU并不适合管理,很多业务需要各种监控终端,互动SIP硬件设备,Web在线业务平台能相互融合,互联互通, 视频混流直播,录存直播推广&a…

数据结构之“合并两个有序链表”

一、后插法 1、定义: 通过将新节点逐个插入到链表的尾部来创建链表。 2、特点: (1)每次申请一个新节点,读入相应的数据元素值 (2)为了使新节点能够插入到表尾,需要增加一个尾指针 r…