一、前言:接口测试之伤: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服务器产生的,只是保存在不同的地方,分别为:客户端,服务器,数据库中,所以他们在项目中的应用场景也不一样!

如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入: Python自动化测试技术群: 953306497 群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。


作者:来自
出处:https://blog.csdn.net/ZangKang1
原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

接口测试彻底弄懂Session、Cookie、Token的区别及联系hold住面试官--hold住了开3万,hold不住开3K!相关推荐

  1. Session/Cookie/Token还傻傻分不清?

    Cookie.Session.Token 傻傻分不清 Session/Cookie/Token 还傻傻分不清? 相信项目中用JWT Token的应该不在少数,但是发现网上很多文章对 token 的介绍 ...

  2. Cookie和Session和Token的区别联系

    目录 发展史 2 Cookie 3 Session 3.1 cookie和session的区别 4 Token 4.1 传统方式--基于服务器的验证 4.2 基于服务器验证方式暴露的一些问题 4.3 ...

  3. UNIAPP day_05(9.3) Cookie、WebStorage、Session 和 Token的区别、uni-app最终部署

    列表页"编写公式: data -- kw:"".list:[ ].pno:0.pageCount:99999.isLoading:falseloadNextPageDat ...

  4. cookie、session、token的区别和相似点,JWT和数字签名以及签名证书的了解

    cookie.session.token分别是什么?有啥区别呢? 为什么需要cookie.session.token呢? 首先,要思考的是为啥有这三个东西,因为HTTP协议是无状态的特性导致的,什么是 ...

  5. cookie、session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?

    HTTP是无状态的,也就是说你这次访问了服务器,关闭网页,再次访问服务器,服务器是没有意识到又是你来访问,那怎么保持登录状态呢? 设置让用户可以选择记住用户名和密码,但是把密码交给浏览器,如果电脑被黑 ...

  6. session和token的区别

    session的使用方式是客户端cookie里存id,服务端session存用户数据,客户端访问服务端的时候,根据id找用户数据 而token一般翻译成令牌,一般是用于验证表明身份的数据或是别的口令数 ...

  7. 分布式系统中使用分布式session和token的区别

    一.分布式session 因为是分布式的系统,传统的单机session不适用于分布式系统中,可以使用分布式session. 本质是使用第三方的数据库(建议是非关系型数据库)来存储session信息,例 ...

  8. Cookies 、 Session 和 token 的区别

    这篇文章写的 Cookies 和 Session的区别 比较详细,也很好理解,可以学习下:https://blog.csdn.net/axin66ok/article/details/6175522 ...

  9. 编译原理 —— 1.2 编译系统的结构(终于弄懂语法和语义的区别了!)

    编译的本质是一个翻译的过程,编译器的输入是一个高级语言程序,编译器的输出是一个汇编语言程序或者机器语言程序. 下面我们了解一下机器怎么将高级语言程序编译成汇编语言程序/机器语言程序:这里我们可以借鉴人 ...

  10. session与token的区别

    验证的两种机制而已,没有优劣之分,适用于不同的业务而已

最新文章

  1. app分发平台java_集成 Asset Delivery (Java)
  2. 【Tyvj - 1305】最大子序和(单调队列优化dp)
  3. 企业大咖教你解决Kubernetes的挑战
  4. npm包管理器安装模块
  5. CSS 浮动 float属性
  6. Batman崛起之地——Gotham
  7. 传奇服务器怎么修改升级武器成功,四次升级武器成功
  8. manjaro上安装独显驱动(双显卡切换)的正确方法
  9. Python3,4行代码给图片加美颜,拍照再也不需要开美颜滤镜了。
  10. 数学/基础数论——从LeetCode题海中总结常见套路
  11. 好用的网页操作自动化软件
  12. linux glib,我该如何安装glib?
  13. 黑白格子图案与苏格兰裙的关系
  14. 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
  15. MonoX被偷袭?快准狠直击命门
  16. 《统计学习方法》——隐马尔可夫模型
  17. PyQt5系列教程(二)利用QtDesigner设计UI界面
  18. MUI tabbar购物车小图标的制作
  19. 谷歌大脑团队任意图像风格化迁移论文详解,模型还可以跑在您本地浏览器里...
  20. RTX51Tiny 学习笔记(一)

热门文章

  1. linux驱动之输入子系统
  2. Linux安装Redis
  3. 通过DCMM评估对企业有什么作用
  4. BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment阅读笔记
  5. java中计算文件的md5,Java计算文件MD5值代码
  6. 如何在电脑上装一个虚拟机
  7. 【渗透测试】--- rbash逃逸方法简述
  8. 创建型模式大全(Java讲解)
  9. bugku之密码ok解题思路
  10. 计算机图形学中划线的程序,计算机图形学划线实验报告