接口测试彻底弄懂Session、Cookie、Token的区别及联系hold住面试官--hold住了开3万,hold不住开3K!
一、前言:接口测试之伤:cookie,session,token本是一家!
cookie,session,token的区别早就已经成为测试同行的心病,各大论坛,各大博客,各大视频网站无不充斥着各种疑问???cookie,session,token本是一家!奈何各位测试同仁总是要把它们分开!各位做测试的小伙伴们只要是做过接口测试或者面试过接口测试都一定会遇到这个问题,在写这篇文章之前笔者也看过很多篇关于session,cookie,token的文章,感觉不是各种复制抄袭,就是泛泛而谈没讲到要点上。希望本篇文章对大家有所帮助!助力大家hold住面试官,hold住了开3万,hold不住开3K。全靠你自己的领悟了。
二、天地初开:http协议诞生
再讲三者的区别之前必须先了解一下http协议,众所周知访问网页都是使用的http协议,而http协议的每一次访问都是无状态的。什么叫无状态?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态的的好处是快速。坏处就是无法把两次请求关联起来。比如下面的对话:
第一次请求:
夏洛:大爷,楼上322住的是马冬梅家吧?
大爷:马都什么?
第二次请求:
夏洛:马冬梅。
大爷:什么都没啊?
第三次请求:
夏洛:马冬梅啊。
大爷:马什么没?
写到这里我忍不住想起这段经典的对话!三次请求毫无关联!请求完就断开了!那么如何才能让两次请求之间有关联呢?如何让Web服务器是如何记住一些事情呢?
三、Cookie横空出世。
Cookie详解:
1.谁产生的,保存在哪里?:
web服务器产生。保存在客户端!容易被劫持,不安全!
2.产生的过程(参考上图):
(1)浏览器第一次访问服务端时,服务器此时肯定不知道它的身份,所以创建一个独特的身份标识数据,格式为key=value键值对,放入到Set-Cookie字段里,随着响应报文一起发送给浏览器。
(2)浏览器看到有Set-Cookie字段以后就知道这是服务器给的身份标识,于是就保存起来,下次请求时会自动将此key=value值放入到Cookie字段中发给服务端。服务端收到请求报文后,发现Cookie字段中有值,就能根据此值识别用户的身份然后提供个性化的服务。
3.Cookie的分类
Cookie分为持久化Cookie和非持久化的Cookie
持久化的Cookie:可以存在于硬盘中,浏览器关闭的话,Cookie也是会存在的。
非持久化的Cookie:存在与内存中,如果浏览器关闭的话,Cookie也会随之消失。
4.cookie在项目中的应用场景
登录记住用户名
浏览器记录用户已浏览过的网页。
5.Cookie如何查看(以CSDN为例和谷歌浏览器为例)
保存密码后:打开CSDN我的博客主页:按F12,在如下图的地址可以找到Cookie保存的用户信息!
总结:Cookie数据由Web服务器生成保存在客服端。cookie的数据格式为键值对,cookie数据有失效时间看expire值。在项目中主要用于记住用户名密码或保存浏览器已访问过的网页。
四、Cookie出世之后,Session不服!
Session详解:
1.谁产生的,保存在哪里?:
web服务器,保存在服务器!(原来和cookie是同一个母亲,两者本是一家,亲兄弟)
2.产生的过程:
当用户登录了系统,服务器端的web容器就会创建一个session,此会话中可以保存登录用户的信息,并且也是以键值对的形式去保存的,系统通过session技术来做的鉴权,因为只有当用户登录了才可以访问系统中的页面和数据。
3.session在项目中的应用场景
一般只保存登录用户的用户名。时长默认是30分钟。所以为什么当你登录系统后一段时间不使用就需要重新登录。因为30分钟后session就已经丢失了!
4.如何查看session(以CSDN为例和谷歌浏览器为例)
保存密码后:打开CSDN我的博客主页:按F12,在如下图的地址可以找到Session保存的用户信息!这里的session名称叫:dc_session_id,这个名字不是固定的,有些叫:JSESSION_ID,有些叫:PHPSESSION_ID一个意思。这个dc_session_id会话编号10_1574860205504.859196就是服务器返回的。服务器端的这个dc_session_id会话保存了登录用户的信息。
总结:Session是Cookie的兄弟也是由Web服务器生成保存在服务端。Session的数据格式也是键值对,Session默认失效时间为30分钟。一般在浏览器的F12中的响应头的cookie(或set-cookie)中查看,在项目中主要用于鉴权判断是否登录状态。只有是登录状态才可以访问服务器的网页和数据。
五、Cookie,Session,Token三兄弟。
token详解:
1.谁产生的,保存在哪里?:
web服务器,保存在数据库中!(原来和cookie和session都是同一个母亲,三者本是一家,三兄弟)
2.产生的过程:
(1)用户第一次登陆的时候,服务端会产生一个token,token会存在于服务器的数据库上,然后将这个token返回给浏览器。
(2)客户端收到token之后会将token存储在本地上
(3)客户端再次发送请求的时候,会将token发送到服务器上
(4)服务端收到这个token的时候会将token与本地的token进行比较,可以来验证身份。
3.session在项目中的应用场景
一般用于App项目登录鉴权或者接口鉴权!因为app项目和接口客户端都不是浏览器,因此就没有cookie和session了。所以通过token来鉴权。
4.如何查看token
有些系统的token直接显示在后面的页面上!而接口的token一般在登录接口的返回值里面。如下图所示为登录接口返回的token:名字可以随便取:可以是token,也可以是下图的access_token,或key,appkey等都可以。
六、本是同根生相煎何太急!
仔细阅读此文后是不是感觉豁然开朗,原来cookie也好,session也好,token也好都是web服务器产生的,只是保存在不同的地方,分别为:客户端,服务器,数据库中,所以他们在项目中的应用场景也不一样!如果你觉得此文对你有帮助,如果你对此文有任何疑问,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入软件测试技术群:695458161,群里发放的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
作者:诸葛
原创不易,本文用时两个小时,欢迎点赞、评论、转载礼貌三连,转载请保留此段声明。
接口测试彻底弄懂Session、Cookie、Token的区别及联系hold住面试官--hold住了开3万,hold不住开3K!的更多相关文章
- 【转】Session Cookie Token的区别
Cookie cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保 ...
- 29、前端知识点--session\cookie\token
Java Token的原理和生成使用机制 https://yq.aliyun.com/articles/594217 Cookies Session Token 三者区别及应用场景 https://w ...
- 彻底弄懂session,cookie,token
session,cookie和token究竟是什么 简述 我在写之前看了很多篇session,cookie的文章,有的人说先有了cookie,后有了session.也有人说先有session,后有co ...
- cookie和session及token的区别联系
1 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我 ...
- cookie、session、token的区别与联系
https://www.cnblogs.com/moyand/p/9047978.html cookie.session.token存在意义 http协议是无状态协议,请求之间是没有联系的,cooki ...
- Session Cookie Token Json-Web-Token
什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明"你是你自己"(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就 ...
- 彻底弄清楚session,cookie,sessionStorage,localStorage的区别及应用场景(面试向)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_94 客户端状态保持是一个老生常谈的问题了,归根结底追踪浏览器的用户身份及其相关数据无非就是以下四种方式:session,cooki ...
- Session 与 Token 的区别
1. 为什么要有session的出现?答:是由于网络中http协议造成的,因为http本身是无状态协议,这样,无法确定你的本次请求和上次请求是不是你发送的.如果要进行类似论坛登陆相关的操作,就实现不了 ...
- Session与Token的区别
1. 为什么要有session的出现?答:是由于网络中http协议造成的,因为http本身是无状态协议,这样,无法确定你的本次请求和上次请求是不是你发送的.如果要进行类似论坛登陆相关的操作,就实现不了 ...
随机推荐
- 关于vue-cli3打包时遇到Cannot assign to read only property 'exports' of object '#<Object>'问题的解决方法。
vue-cli3打包时遇到Cannot assign to read only property 'exports' of object '#<Object>'问题的解决方法. 大致是说, ...
- zabbix图表出现中文乱码
搭建完成Zabbix监控服务器之后,切换到中文语言,图表展示出现乱码,如图所示 按照网上流传的上传windows下的字体的方法,还是不行,最后发现是PHP编译时的问题: php在编译时开启了-enab ...
- C++ 按行读取文件并打印
#include<iostream> #include<fstream> #include<string> #include <vector> #inc ...
- Spring注解 - AOP 面向切面编程
基本概念: AOP:Aspect Oriented Programming,即面向切面编程 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 前置通知(@Before):在目标 ...
- 初识Flask、快速启动
目录 一.初识Flask 1.1 什么是flask? 1.2 为什么要有flask? 二.Flask快速启动 一.初识Flask 1.1 什么是flask? Flask 本是作者 Armin Rona ...
- 小程序中内容审核功能的使用(后台使用thinkPHP5.1)
本文包含文本和图片的检测 //接收要检测的文本内容并调用检测方法 public function textCheck(Request $request){ //内容安全识别 $data['conten ...
- 改变 C/C++ 控制台程序的输出颜色和样式
我们经常可以看见Linux自带终端下的许多程序都输出了不同颜色和底纹的字体.最近也想要自己实现一下这种效果,方法是在输出流中插入占位符\033[***. 我从网上收集了一些常用的控制语句,并用以下代码 ...
- Java 并发容器(转)
转自:https://blog.ouyangsihai.cn/%2Fjava-gao-bing-fa-zhi-bing-fa-rong-qi-xiang-jie-cong-ru-men-dao-cha ...
- Python习题集(十三)
每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! https://www.cnblogs.com/poloyy/category/1676599.html 题目 写一个函数,该函数 ...
- C#中无边框窗体拖动
//定义一个bool变量标识是否拖动窗体 private bool isMove = false; //记录鼠标的位置 private Point point; 定义的变量 /// <summa ...