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

news2024/10/2 6:42:48

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折。

学习安排上

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

在这里插入图片描述

视频文档获取方式:

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

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

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

相关文章

C语言(函数和递归)

函数是完成特定任务的独立程序代码单元。 目录 一.函数 1.创建一个简单的函数 2.定义带形式参数的函数 3.使用return从函数中返回值 二.递归 一.函数 1.创建一个简单的函数 #include <stdio.h> void print(void); //函数原型 int main(){ print(); //函…

Weblogic CVE之旅之T3协议浅学习

前言 这篇文章主要是学习Weblogic CVE漏洞中的过程中&#xff0c;对其中的一种利用方式T3协议反序列化漏洞进行分析。 前置 什么是T3协议&#xff1f; T3协议是一种Weblogic RMI 调用时的通信协议, 对于JAVA RMI(Remote Method Invocation) 来说&#xff0c;基础的通信协议…

Web前端:使用Angular CLI时的最佳实践和专业技巧

在web开发业务中&#xff0c;构建高性能的应用程序是首要因素。此外&#xff0c;用开发人员最流行的语言开发一个健壮的网站将始终为构建高功能的网站提供适当的基础网站。相比之下&#xff0c;不可否认&#xff0c;Angular CLI是建立得最好且正在成长的框架之一。Angular CLI简…

【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式 国赛 程序设计试题以及详细题解

文章目录原题展示原题分析详细题解LED模块按键模块串口LCD模块模拟电压读取(ADC)脉冲输入输出文章福利原题展示 原题分析 本届国赛试题主要包含LCD、LED、按键、EEPROM、串口、模拟电压输入、脉冲输入输出七大部分&#xff0c;其中前面三个部分是蓝桥杯嵌入式的“亲儿子”(必考…

2023年妇女节是哪一天 妇女节是2023年几月几日?

2023年妇女节是哪一天是2023年几月几日&#xff1f; 2023年妇女节是2023年3月8日 三八妇女节是国家法定节假日吗&#xff1f; 妇女节不是国家法定节假日&#xff0c;而国家法定节假日包括&#xff1a;元旦、春节、清明节、劳动节、端午节、中秋节、国庆节&#xff1b; 关于三…

操作系统(day09) -- 连续分配管理方式

连续分配管理方式 单元连续分配 动态分区分配 1.系统要用什么样的数据结构记录内存的使用情况&#xff1f; 两种常用的数据结构 空闲分区表 每个空闲分区对应一个表项。表项中包含分区号、分区大小、分区起始地址等信息空闲分区链 每个分区的起始部分和末尾部分分别设置前向…

硬件学习 软件Cadence day02 画原理图的基本操作 (键盘快捷键 , 原理图设计流程 , 从开始到导出网表流程)

1. ORCAD Capture cls 界面的快捷键 键盘 按键对应的操作I放大 &#xff08;可以滚轮操作&#xff09;O缩小 &#xff08;可以滚轮操作&#xff09;W画线Esc退出现在的状态 &#xff08;画图界面 右键 End xxx&#xff09;N放置网络标号J放置节点 (控制…

花2个月面过华为测开岗,拿个30K不过分吧?

背景介绍 美本计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三暑假回国的时间比较短&#xff08;小于两个月&#xff09;&#xff0c;于是找的实…

ChatGPT is not all you need,一文看尽SOTA生成式AI模型:6大公司9大类别21个模型全回顾(一)

文章目录ChatGPT is not all you need&#xff0c;一文看尽SOTA生成式AI模型&#xff1a;6大公司9大类别21个模型全回顾&#xff08;一&#xff09;Text-to-Image 模型DALL-E 2IMAGENStable DiffusionMuseText-to-3D 模型DreamfusionMagic3DChatGPT is not all you need&#x…

Python和Java语言,哪个更适合做自动化测试?

经常有测试新手问我&#xff1a;Python和Java语言&#xff0c;哪个更适合做自动化测试&#xff1f;本来想简单的回答一下的&#xff0c;但又觉得对不起大家对小编的信任。因此&#xff0c;小编今天专门写了一篇文章来回答这个问题。欢迎各位大佬补充~1、什么是自动化测试&#…

大数据框架之Hadoop:HDFS(八)HDFS HA高可用

8.1 HA概述 1&#xff09;所谓HA&#xff08;High Available&#xff09;&#xff0c;即高可用&#xff08;7*24小时不中断服务&#xff09;。 2&#xff09;实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制&#xff1a;HDFS的HA和YARN的HA。 3&…

一文优化java.lang.StackOverflowError的堆栈溢出问题及递归引发的java.lang.StackOverflowError错误

文章目录1. 问题引出2. 分析问题2.1 为什么递归调用会导致堆栈溢出2.2 数组太大或分配内存多于可用内存导致堆栈异常3. 优化避免栈溢出3.1 尾递归优化3.2 循环替代递归4. 重要总结1. 问题引出 今天在编码时&#xff0c;出现了java.lang.StackOverflowError&#xff0c;就感觉很…

【Python小游戏】没点儿技术真不敢这么玩儿:人工智能挑战《贪吃蛇》,来自AI的艺术——超级游戏高手世界最高纪录秒被盘?

前言 每天分享各种Python项目、好玩的Pygame游戏、Python的爬虫、数据分析案例、有趣的人 工智能知识等。期待你的关注哦&#xff01; 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 哈喽&…

探索IP地址的应用

无论是互联网行业还是传统行业都会用到网络&#xff0c;作为企业如何维护网络安全&#xff0c;保障网站不被攻击&#xff0c;数据不被泄露等。这个时候我们就会通查询IP归属地&#xff0c;辅助企业解决安全问题。下面介绍一下ip归属地在各行业的具体应用。1.网安行业应用一&…

SpringBoot实现登录拦截器超详细(springboot拦截器excludePathPatterns方法不生效的坑)

文章目录SpringBoot实现登录拦截器1、SpringBoot 实现登录拦截的原理1.1、实现HandlerInterceptor接口1.2、实现WebMvcConfigurer接口&#xff0c;注册拦截器1.3、保持登录状态springboot拦截器excludePathPatterns方法不生效的坑与解决方法一、前言二、问题三、解决方法四、总…

C语言编译过程

C语言编译过程1、C语言编译过程2、单c文件编译实践3、多c文件编译实践4、define4.1、不带参宏4.2、带参宏4.3、带参宏和带参函数的区别5、选择性编译ifdef、ifndef、if5.1、#ifdef5.2、#ifndef5.3、#if6、静态库和动态链接库6.1、静态库实践6.1.1、将mylib.c制作成静态库6.1.2、…

Baklib知识库管理平台,协助组织提升知识管理水平

随着信息时代和知识经济时代的到来&#xff0c;企业内部信息资料繁多冗杂&#xff0c;知识管理逐渐成为各大企业的重要工作之一&#xff0c;企业管理者无不感受到巨大的压力&#xff0c;怎么样将知识进行有效的管理&#xff0c;成为一个难点&#xff0c;并且随着信息不断的更迭…

Java企业级信息系统开发学习笔记(1)初探Spring与骑士傻龙实例

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/iK3aM】 文章目录1. 创建Maven项目2. 添加Spring依赖3. 创建杀龙任务4. 创建勇士类5. 采用传统的方式6. 采用Spring容器让勇敢骑士完成杀龙任务6.1 创建日志属性文件6.2 创建Spring配置文件6.3 在…

CobaltStrike上线微信通知

CobaltStrike上线微信通知 利用pushplus公众号&#xff08;每天免费发送200条消息&#xff09; http://www.pushplus.plus/push1.html 扫码登录后需要复制token 可以测试一下发送一下消息&#xff0c;手机会受到如下消息。可以在微信提示里将消息免打扰关闭&#xff08;默认…

分布式光伏储能系统的优化配置方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…