【软件测试】cookie、session和token的区别

今天就来说说session、cookie、token这三者之间的关系!最近这仨玩意搞得头有点大

为什么会有它们三个

我们都知道 HTTP 协议是无状态的,所谓的无状态就是客户端每次想要与服务端通信,都必须重新与服务端链接,意味着请求一次客户端和服务端就连接一次,下一次请求与上一次请求是没有关系的。

这种无状态的方式就会存在一个问题:如何判断两次请求的是同一个人?就好比用户在页面 A 发起请求获取个人信息,然后在另一个页面同样发起请求获取个人信息,我们如何确定这俩个请求是同一个人发的呢?

为了解决这种问题,我们就迫切需要一种方式知道发起请求的客户端是谁?此时cookie、token、session 就出现了,它们就可以解决客户端标识的问题,在扩大一点就是解决权限问题。

它们就好比让每个客户端或者说登录用户有了自己的身份证,我们可以通过这个身份证确定发请求的是谁!从而知道用户登录的信息

什么是 cookie

cookie 是保存在客户端或者说浏览器中的一小块数据,大小限制大致在 4KB 左右,在以前很多开发人员通常用 cookie 来存储各种数据,后来随着更多浏览器存储方案的出现,cookie 存储数据这种方式逐渐被取代

主要原因有如下:

  • cookie 有存储大小限制,4KB 左右

  • 浏览器每次请求会携带 cookie 在请求头中

  • 字符编码为 Unicode,不支持直接存储中文

  • 数据可以被轻易查看

cookie 主要有以下属性:

那么我们是如何通过 cookie 来实现用户确定或者权限的确定呢?

我们就以一个普通网站的用户登录操作以及后续操作为例,主要过程可以简单用下图表示:

从上图中可以看到使用 cookie 进行用户确认流程是比较简单的,大致分为以下几步:

1.客户端发送请求到服务端(比如登录请求)。

2.服务端收到请求后生成一一个session会话。

3.服务端响应客户端,并在响应头中设置 Set-Cookie。Set-Cookie 里面包含了 sessionId,它的格式如下:

Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]

其中 sessionId 就是用来标识客户端的,类似于去饭店里面,服务员给你一个号牌,后续上菜通过这个号牌来判断上菜到哪里。

4.客户端收到该请求后,如果服务器给了 Set-Cookie,那么下次浏览器就会在请求头中自动携带 cookie。

5.客户端发送其它请求,自动携带了 cookie,cookie 中携带有用户信息等。

6.服务端接收到请求,验证 cookie 信息,比如通过 sessionId 来判断是否存在会话,存在则正常响应。

cookie 主要有以下特点:

  • cookie 存储在客户端

  • cookie 不可跨域,但是在如果设置了 domain,那么它们是可以在一级域名和二级域名之间共享的

什么是session

在上一节中,我们通过 Cookie 来实现了用户权限的确认,在其中我们提到了一个词:session。顾名思义它就是会话的意思,session 主要由服务端创建,主要作用就是保存 sessionId,用户与服务端之间的权限确认主要就是通过这个 sessionId。

简单描述下 session:
session 由服务端创建,当一个请求发送到服务端时,服务器会检索该请求里面有没有包含 sessionId 标识,如果包含了sessionId,则代表服务端已经和客户端创建过 session,然后就通过这个sessionId 去查找真正的session,如果没找到,则为客户端创建一个新的 session,并生成一个新的 sessionId 与 session对应,然后在响应的时候将 sessionId 给客户端,通常是存储在cookie 中。如果在请求中找到了真正的session,验证通过,正常处理该请求

总之每一个客户端与服务端连接,服务端都会为该客户端创建一个 session,并将 session 的唯一标识 sessionId 通过设置 Set-Cookie 头的方式响应给客户端,客户端将 sessionId 存到 cookie 中

通常情况下,我们 cookie 和 session 都是结合着来用,我们可以在修改一下整个请求过程图,如下所示:

cookie和session区别

前面两节我们介绍了 cookie 和 session,它们两者之间主要是通过 sessionId 关联起来的,所以我们总结出:sessionId 是 cookie 和 session 之间的桥梁。我们日常的系统中如果在鉴权方面如果使用的是 cookie 方式,那么大部分的原理就和我们前面说的一样。

或者我们可以换个说法,session 是基于 cookie 实现的,它们两个主要有以下特点:

  • session 比 cookie 更加安全,因为它是存在服务端的,cookie 是存在客户端的

  • cookie 只支持存储字符串数据,session 可以存储任意数据

  • cookie 的有效期可以设置较长时间,session 有效期都比较短

  • session 存储空间很大,cookie 有限制

  • 系统想要实现鉴权,可以单独使用 cookie,也可以单独使用 session,但是建议结合两者使用

token 是什么

前面我们说的 sessionId 可以叫做令牌,令牌顾名思义就是确认身份的意思,服务端可以通过令牌来确认身份。cookie+session 是实现认证的一种非常好的方式,但是凡事都有两面性

它们实现的认证主要有以下缺点:

  • 增加请求体积,浪费性能,因为每次请求都会携带 cookie。

  • 增加服务端资源消耗,因为每个客户端连接进来都需要生成 session,* * 会占用服务端资源的。

  • 容易遭受 CSRF 攻击,即跨站域请求伪造。

那么为了避免这些缺点,token 方式的鉴权出现了,它可以说是一个民间的认证方式,但是不得不说它带来了非常多的好处。

1、token 的组成:

token 其实就是一串字符串而已,只不过它是被加密后的字符串,它通常使用uid(用户唯一标识)、时间戳、签名以及一些其它参数加密而成。我们将 token 进行解密就可以拿到诸如 uid 这类的信息,然后通过uid 来进行接下来的鉴权操作。

2、token 是如何生成的:

前面我们说 cookie 是服务端设置了 set-cookie 响应头之后,浏览器会自动保存 cookie,然后下一次发送请求的时候会自动把cookie 携带上。但是我们说 cookie 算是一种民间的实现方式,所以说

浏览器自然不会对它进行什么处理。token主要是由服务器生成,然后返回给客户端,客户端手动把 token 存下来,比如利用localstorage 或者直接存到 cookie当中也行。

3、token 认证流程:

  • 客户端发起登录请求,比如用户输入用户名和密码后登录

  • 服务端校验用户名和密码后,将用户 id 和一些其它信息进行加密,生成 token

  • 服务端将 token 响应给客户端

  • 客户端收到响应后将 token 存储下来

  • 下一次发送请求后需要将 token 携带上,比如放在请求头中或者其它地方。

  • 服务端 token 后校验,校验通过则正常返回数据

用图表示大致如下:

总结

虽然前面解释 cookie、session、token 用了不少口舌,但是归根结底啊,它们的目的都是一样的:鉴权和认证


总结下来就是:session 是空间换时间,token 是时间换空间。


粉丝福利

这份资料,对于【软件测试】的朋友来说应该是最全面最完整的备战资料,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,这些资料也陪伴了我走过最艰难的路,希望也能帮助到你!!!

在这里插入图片描述

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

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

相关文章

阿宝的成长记录

宝宝需要减肥了,翻身有点困难!

阿宝的生日礼物

阿宝的生日蛋糕很好吃,很难的事情,在任何时候,都会有自己的判断和想法。

图片主色调提取

本文主要阐述用传统图像处理的手段来解决RGB图的颜色量化问题; 简单解释下颜色量化,一张RGB图,图上每个像素点分别有R、G、B三个分量,每个分量由一个字节表示,那么颜色空间大小是256^3。显然人眼观测的时候&#xff0…

如何获得完美的调色板?完美的配色素材专辑拿走!

第1步--原色和系统色 从一个主色开始,根据喜好、研究颜色含义来确定。 选择的主色是品牌色。 一旦有了主色,就需要文字、背景、容器等的颜色。 通常情况下,会选择一个深色的颜色,用于文本,而背景则是浅灰色的颜色。…

Seaborn的调色板(palette)

Seaborn的调色板(palette) Seaborn可以很容易地使用适合数据特征和可视化目标的颜色。本章讨论了指导您选择的一般原则和帮助您快速找到给定应用程序的最佳解决方案的seaborn工具。 由于我们眼睛的工作方式,一种特定的颜色可以用三个成分来定…

图片色调识别

图片色调识别 色调定义色调提取方法中位切分法RGB与色调 色调定义 (1) 暖色调温暖与热烈是暖色的基调。当人们见到红、橙、黄、红紫等暖色调后,比较容易联想到太阳、火焰、热血等事物,会有温暖、欢乐、刺激等感觉。按照给人温暖感觉的强度有高到低排序:…

Haishoku识别图片主色调和配色方案

对于图片分析,一直觉得很高大上,从来不动这方面。今天翻看python weekly,发现一个很有趣的库-Haishoku。 简介 haishoku 是一个日语词, 意思是配色. Haishoku 是一个用来获取图片主色调和主要配色方案的python库,依赖于python3和…

半色调技术

这个主要是为了对付作业,对各处找到的资料缝缝补补的整合,因为比较杂乱,已经忘记是在哪儿看到大佬们的文章了,整理一下思路。 背景 半色调图像如常见的印刷品图像,其由浅到深或由淡到浓的变化,是靠网点面…

DaVinci:调色版本

调色版本 Grade Version记录着片段的全部调色信息。 将一种调色风格或效果,保存为一个调色版本,从而可在多个调色版本之间查看、比较、挑选或者渲染输出。 调色版本类型 本地版本 Local Versions 在没有创建新的调色版本之前,片段的调色信息默…

seaborn库调色板color设置【知识整理】

seaborn库的使用(color设置) 综述代码模块调色板分类色板(离散)颜色的亮度及饱和度颜色对比xkcd选取颜色连续色板(连续)cubehelix_palette调色板RGB值选取颜色 小结 综述 学生党整理一些关于数据分析的知识…

转载之色调映射

一、概述 虽然HDR 图像有较大的动态范围,能更细致地反映真实场景,但他的缺点也很明显。一是同尺寸的数据比低动态范围图像大,需要更大的存储空间与传输带宽。二是难以输出,目前大多数显示器、打印机等图形输出设备的动态范围要比普…

Windows OpenGL 图像色调

目录 一.OpenGL 图像色调调节 1.原始图片2.效果演示 二.OpenGL 图像色调调节源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL…

【PHP】识别图片主色调

一、适用情景&#xff1a;如http://www.teapic.com/list.htm&#xff0c;根据颜色列出相应图片。 二、主程序及API解释&#xff1a; <?phpclass MajorColor {//参考颜色protected $_colors null;//容差protected $_tolerance 80;//忽略的颜色protected $_ignoreColors a…

色调列表

NamedNumericColor NameHex RGBDecimal LightPink浅粉红#FFB6C1255,182,193 Pink粉红#FFC0CB255,192,203 Crimson猩红 (深红)#DC143C220,20,60 LavenderBlush淡紫红#FFF0F5255,240,245 PaleVioletRed弱紫罗兰红#DB7093219,112,147 HotPink热情的粉红#FF69B4255,105,180 DeepPin…

图片调色学习

色相环 色相混合正红&#xff08;0&#xff09;正黄&#xff08;60&#xff09;&#xff0c;透明度为&#xff08;50%&#xff09;即红黄等比例混合橙色&#xff08;30&#xff09; (060&#xff09;/230 真实调整透明度混合出并不一定为两者均值的色相,需要选择不同的混合方法…

Seaborn--调色板(二)

调色板 颜色很重要 color_palette()能传入任何Matplotlib所支持的颜色 color_palette()不写参数则默认颜色 set_palette()设置所有图的颜色import numpy as np import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline sns.set(rc{"figure.figsize&qu…

色温,色阶,色调,色调

色温 对于外拍人像来说&#xff0c;需要注意的问题很多&#xff0c;例如环境选择、模特的服装、发型、配用的道具、拍摄时的姿势以及使用的器材等等。但从技术角度来说&#xff0c;还有很多在拍摄时需要注意的地方&#xff0c;例如白平衡的控制、焦点选择、机内色彩的调整、锐…

“莫兰迪色系” 高级灰

“莫兰迪色系”指的是高级灰色调&#xff0c;不鲜亮&#xff0c;仿佛蒙上一层灰调&#xff0c;低调有内涵&#xff0c;舒缓雅致&#xff0c;略显冷静&#xff0c;有一种性冷淡风&#xff0c;”高级灰“的梗就是出自这里。

10种舒服的颜色及配色推荐

前言 有一些配色的建议分享给大家。 颜色 RGB值 该部分RGB值来自 科学上最令人舒服的十种颜色&#xff08;RGB 19CAAD 8CC7B5 A0EEE1 BEE7E9 BEEDC7 1.R 25 G 202 B 173 2. R 140 G 199 B 181 3.R 160 G 238 B 225 4.R 190 G 231 B 233 5.R 190 G 237 B 199 D6D5B7 D1BA74…