当前位置: 首页 > news >正文

如何理解​session、cookie、token的区别与联系?

session、cookie、token。 相信学过接口的朋友都特别熟悉了。

但是对我一个刚接触接口测试的小白来说,属实有点分不清楚。

下文就是我通过查阅各种资料总结出来的一点理解,不准确的地方还请各位指正。

(文末送洗浴中心流程指南)

产生背景

网络中http协议本身是无状态协议。

无状态协议的意思是:客户端向服务器请求数据时,每一次的请求和上一次都是没有任何关联的(特点:快!)。网上有一个经典的例子(看一次笑一次)可以帮助大家理解。
在这里插入图片描述
夏洛:楼上住的是马冬梅家吗?(第一次请求)
大爷:马什么梅?
夏洛:马冬梅。(第二次请求)
大爷:什么冬梅?
夏洛:马冬梅!(第三次请求)
大爷:马冬什么?
夏洛:没事,大爷您歇着吧。
这位大爷就可以理解为web服务器。为了让这位大爷无状态的服务器能记住上一秒我是谁,cookie、session、token就横空出世,各显神威了。

cookie

一句话概括:服务器产生,只保存在客户端,客户端后续请求都需要携带cookie,供服务器识别身份。
产生过程:

1.客户端第一次访问服务器,服务器并不认识这是谁,于是创建一组数据放到一个叫做’Set-Cookie’的字段里发送给客户端,数据格式为’key=value’

2.客户端收到Set-Cookie字段的数据后,将数据保存到浏览器本地,下次请求时会自动将这个’key=value’放到cookie中发送到服务器

3.服务器收到请求后,就可以根据cookie字段中的值识别其身份,并提供服务。

分析

作为一名测试,一听就知道,这种放在客户端的数据肯定不安全,有可能被拦截并恶意使用,所以cookie用来保存一些不重要的信息,比如我们常见的记住用户名、浏览记录等。

拓展

那么cookie具体是存放在哪里呢?

以chrome为例,右上角点击‘…’,选择设置,点击左侧隐私设置和安全性,然后选择Cookie及其他网站数据,最后点击查看所有 Cookie 和网站数据
在这里插入图片描述
在不信任的环境下可以清除这里面的数据。

也可以通过F12查看我们当前网页存的cookie数据,以我自己的csdn博客为例
在这里插入图片描述
cookie数据有失效时间,看expire值。

session

一句话概括:session就是一个会话信息。保存在服务器上,客户端每次请求时带着sessionID(一般放在cookie里)即可。
产生过程
1.客户端访问服务器

2.服务器收到后生成一个sessionID发送给客户端,同时,服务器也把sessionID和对应的用户信息、操作记录等记录在服务器上(记录方式有很多,文件、数据库、内存都可以)。

3.客户端再次访问服务器时,会带着包含sessionID的cookie

4.服务器再次收到请求,发现cookie里有sessionID,然后去之前自己记录的信息找这个sessionID,找到后就可以知道该sessionID对应的用户信息、操作记录等信息。

5.客户端退出,则会话结束,session失效(但不绝对),所以服务器也为session设置了一个失效时间,默认为30分钟。

分析

session相对于cookie来说更安全,所以一些重要信息会存放在session中。但session会在一定时间内(默认半小时)保存在服务器上,当访问增多,会比较占用你服务器的性能。

session还有一个最突出的缺陷就是可拓展性差,比如服务器有两台机器,我通过机器A登录了系统,那么我的信息,也就是session就会保存在机器A上,但如果我下次的请求发到了机器B上怎么办?机器B上可没有存我的sessionID。

虽然大家也研究出来了一些应对办法,但都很麻烦且不能算完美解决(主要是我看不太懂,不过在学习接口测试前期,了解session的工作机制及其优缺点就暂时够用)。

token(令牌)
一句话概括:用户登录成功后,服务器用一堆复杂的数据加算法进行加密并签名后,返回一个token给客户端,作为客户端的唯一身份标识,客户端后续请求带着这个token即可。

产生过程

1.用户通过用户名和密码进行登录

2.服务器验证后,根据算法生成token返回给客户端,同时给数据库和Redis里关联token和用户信息

3.客户端收到token并保存,再次发送请求时把token放到http的请求头里。

4.服务器查询数据库和Redis,验证(解密)token,通过则返回数据

分析

token作为目前比较常用的登录验证方式, 我理解的其最明显优势:

1.无状态。token放到http的头里,相当于无状态访问,服务器不用存数据,只需要验证token,相当于用token的解密时间换取session的存储空间。

2.安全。服务器生成token时会用到各种算法进行加密/签名,且这套算法只有他自己知道,听起来就比前边两种安全多了。而且我们在登录的时候可以带上一些参数(比如设备ID、mac地址)发送给服务器用来加密,服务器解析token时如果这些参数的值发生变化了,就会验证不通过,这样就保证了每一个设备拥有了一个唯一的会话。

token是有时效的,一段时间之后用户就需要重新验证。

3.可拓展性。支持跨域访问和跨平台(比如支持移动设备)访问,在不同的服务器上,只要token校验规则相同,就可以请求到数据和资源。

思考

最后,通过一个生活中的例子加强对三者的理解:

比如你去洗浴消费,你就相当于客户端,洗浴中心相当于服务器。

你来到前台说要洗澡(登录成功),这时会给你个手牌(token)作为你身份认证标识,进去洗澡、搓澡、打盐(这些服务会记在你的手牌号上并通知前台)一通享受后,出来结账,前台会通过你的手牌号码(sessionID)查一下你进行了哪些服务,结完账,临走前洗浴中心送了你一张打折券(cookie),下次来别忘了带(存你本地了),见券打8折。

学习安排上

如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

在这里插入图片描述

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群即可自行领取

相关文章:

如何理解​session、cookie、token的区别与联系?

session、cookie、token。 相信学过接口的朋友都特别熟悉了。 但是对我一个刚接触接口测试的小白来说,属实有点分不清楚。 下文就是我通过查阅各种资料总结出来的一点理解,不准确的地方还请各位指正。 (文末送洗浴中心流程指南&#xff09…...

【MyBatis】| MyBatis分页插件PageHelper

目录 一:MyBatis使⽤PageHelper 1. limit分⻚ 2. PageHelper插件 一:MyBatis使⽤PageHelper 1. limit分⻚ (1)概念: ①页码:pageNum(用户会发送请求,携带页码pageNum给服务器&am…...

Java枚举类详解

一、定义格式 public enum s { 枚举项1,枚举项2,枚举项3; } // 定义一个枚举类,用来表示春,夏,秋,冬这四个固定值 public enum Season {SPRING,SUMMER,AUTUMN,WINTER; } 二、枚举的特点 1、所有枚举类都是Enum的子类 2、我们可以通…...

C语言数组

一.数组定义 数组由数据类型相同的一系列元素组成 如 int main(){ float candy[365]; char code[12]; int states[50]; … } cnady是包含了365个float元素的数组。code是包含了12个char类型的数组。states包含了50个int类型的数组。 二.数组初始化和取值 我们使用花括号包含值&…...

Scala 入门(第一章Scala 环境搭建、插件的安装)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 第 1 章 Scala 入门1.1 概述1.1.1 为什么学习 Scala1.1.2 Scala 发展历史1.1.3 Scala 和 Java 关系1.1.4 Scala 语言特点1.2 Scala 环境搭建1.3 Scala 插件安装1.4 HelloWorl…...

math@多项式@求和式乘法@代数学基本定理

文章目录多项式求和式乘法应用代数学基本定理相关证明高次方程其他关于多项式的参考多项式求和式乘法 S∏j1(∑k1ajk)⁣ ⁣ ⁣j∏j1m(∑k1njajk)⁣ ⁣ ⁣jS\prod_{j1}\left(\sum\limits_{k1}a_{jk}\right)_{\!\!\!j} \\\prod_{j1}^{m}\left(\sum\limits_{k1}^{n_j}a_{jk}\r…...

Kafka系列之:基于SCRAM和Ranger机制完成动态新增kafka读写账号、赋予账号对指定Topic的读写权限

Kafka系列之:基于SCRAM和Ranger机制完成动态新增kafka读写账号、赋予账号对指定Topic的读写权限 一、需求背景二、添加写用户三、查看用户是否添加到zookeeper中四、查看用户五、赋予用户topic写权限六、生产者配置文件七、ranger给用户权限八、往Topic写数据九、删除添加的用…...

第五十三章 DFS进阶(一)——剪枝优化

第五十四章 DFS进阶(一)——剪枝优化一、什么是剪枝?二、剪枝优化的策略1、优化搜索顺序2、排除等效冗余3、可行性剪枝4、最优性剪枝5、记忆化搜索三、例题1、AcWing 165. 小猫爬山(DFS 剪枝优化)2、AcWing 167. 木棒…...

Java字节码深度知多少?

文章目录1、字节码结构1.1、基本结构1.2、实际观测2、内存表示3、方法调用指令4、invokedynamicEND结语Java真的是长盛不衰,拥有顽强的生命力。其中,字节码机制功不可没。字节码,就像是 Linux 的 ELF。有了它,JVM直接摇身一变&…...

【C++】智能指针(万字详解)

🌈欢迎来到C专栏~~智能指针 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&…...

使用docker配置mysql主从复制

1.新建主服务器容器实例: docker run -p 3307:3306 --name mysql \ -v /docker/mysql/data:/var/lib/mysql \ -v /docker/mysql/conf:/etc/mysql/conf \ -v /docker/mysql/log:/var/log/mysql \ -e MYSQL_ROOT_PASSWORDroot \ -d mysql:5.7 设置容器卷之后&#xf…...

v3 异步组件及分包使用

1 app.vue <template> <!-- vue3异步组件必须使用suspense --> <Suspense> <template #default> <!-- 异步组件 --> <SyncVue></SyncVue> </template> <template v-slot:fallback> <!-- 优先显示骨架屏 --> <…...

实用调试技巧【上篇】

&#x1f534;本文章是在 Visual Studio 2022&#xff08;VS2022&#xff09;编译环境下进行操作讲解 文章目录&#x1f973;1. 什么是bug&#xff1f;&#x1f973;2.调试有多重要&#xff1f;2.1. 我们是如何写代码的&#xff1f;2.2.调试是什么&#xff1f;2.3.调试的基本步…...

JavaScript 教程

手册简介JavaScript 是世界上最流行的脚本语言。 JavaScript 是属于 web 的语言&#xff0c;它适用于 PC、笔记本电脑、平板电脑和移动电话。 JavaScript 被设计为向 HTML 页面增加交互性。 许多 HTML 开发者都不是程序员&#xff0c;但是 JavaScript 却拥有非常简单的语法。几…...

在SpringBoot里面使用原生的Servlet

在SpringBoot里面使用Servlet 首先在主程序中添加注解主程序添加ServletComponentScan // 加上这个注解之后就可以使用原生的组件了 HttpServlet 继承HttpServlet 重写方法 添加WebServlet 第一种方式使用注解 WebServlet(value "/helsk") public class HelloSe…...

商标被驳回,先别慌!挽回商标有办法

商标注册是一个漫长的等待过程&#xff0c;提交了注册申请之后不代表就能得心应手。商标局在接收到申请后&#xff0c;便会开始各阶段审查&#xff0c;面对不符合条件的商标会予以商标驳回。商标局基于什么原因而驳回注册申请呢?驳回后还有必要进行商标驳回复审吗?今天心周企…...

VMware安装Linux虚拟机后忘记root密码处理方法

OS版本&#xff1a;Red Hat 7.7 问题说明&#xff1a; 之前用VMWare安装了一台Linux虚机&#xff0c;由于长期没使用&#xff0c;导致忘记了root密码。所以需要修改root密码。 Root密码修改 现将修改root密码的操作步骤记录如下。 1.启动虚拟机&#xff0c;出现启动倒计时…...

Centos安装OpenResty

文章目录一. OpenResty是什么二. OpenResty的安装1. 安装开发库2. 安装OpenResty仓库3. 安装OpenResty4. 安装opm工具5. 目录结构6. 配置nginx的环境变量7. 启动和运行8. 配置文件修改三. 小案例1. 案例说明2. OpenResty监听请求3. 编写业务代码4. 获取请求参数一. OpenResty是…...

阿里云部署SpringBoot项目

目录 步骤1&#xff1a;购买服务器(新用户免费试用一个月) 步骤2&#xff1a;查看服务器相关信息 ​编辑 步骤3&#xff1a;设置安全组 步骤4&#xff1a;远程连接 步骤5&#xff1a;使用FinalShell连接阿里云服务器 步骤6&#xff1a;阿里云服务器上安装JDK ​编辑 步骤7…...

EdgeCOM嵌入式边缘计算机的参数配置

EdgeCOM嵌入式边缘计算机的参数配置&#xff1a; 下面以 eth0 为例进行命令说明。 在 Linux 系统下&#xff0c;使用 ifconfig 命令可以显示或配置网络设备&#xff0c;使用 ethtool 查询及 设置网卡参数。 设置 IP 地址&#xff0c;查看当前网卡详情&#xff1a; rootfl-imx6u…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...