一、前言:接口测试之伤: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!的更多相关文章

  1. 【转】Session Cookie Token的区别

    Cookie cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保 ...

  2. 29、前端知识点--session\cookie\token

    Java Token的原理和生成使用机制 https://yq.aliyun.com/articles/594217 Cookies Session Token 三者区别及应用场景 https://w ...

  3. 彻底弄懂session,cookie,token

    session,cookie和token究竟是什么 简述 我在写之前看了很多篇session,cookie的文章,有的人说先有了cookie,后有了session.也有人说先有session,后有co ...

  4. cookie和session及token的区别联系

    1 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应,  尤其是我 ...

  5. cookie、session、token的区别与联系

    https://www.cnblogs.com/moyand/p/9047978.html cookie.session.token存在意义 http协议是无状态协议,请求之间是没有联系的,cooki ...

  6. Session Cookie Token Json-Web-Token

    什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明"你是你自己"(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就 ...

  7. 彻底弄清楚session,cookie,sessionStorage,localStorage的区别及应用场景(面试向)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_94 客户端状态保持是一个老生常谈的问题了,归根结底追踪浏览器的用户身份及其相关数据无非就是以下四种方式:session,cooki ...

  8. Session 与 Token 的区别

    1. 为什么要有session的出现?答:是由于网络中http协议造成的,因为http本身是无状态协议,这样,无法确定你的本次请求和上次请求是不是你发送的.如果要进行类似论坛登陆相关的操作,就实现不了 ...

  9. Session与Token的区别

    1. 为什么要有session的出现?答:是由于网络中http协议造成的,因为http本身是无状态协议,这样,无法确定你的本次请求和上次请求是不是你发送的.如果要进行类似论坛登陆相关的操作,就实现不了 ...

随机推荐

  1. 利用Java实现指定文件夹下的照片以自定义格式移动

    前几天本猿的大学同学,一个漂亮的小姐姐工作时遇到了一个问题,她的需求是,在公司局域网的电脑上下载大量的图片重命名成指定得1.2.3.....以此类推,需要当天完成,我就临时给写了一个小demo. 我的 ...

  2. 02-influxdb执行命令方式

    influxdb执行命令方式 1. 三种操作方法 InfluxDB提供三种操作方式: 1)客户端命令行方式 2)HTTP API接口 3)各语言API库 2. 客户端命令行方式 查看influxdb占 ...

  3. MATLAB神经网络(4) 神经网络遗传算法函数极值寻优——非线性函数极值寻优

    4.1 案例背景 \[y = {x_1}^2 + {x_2}^2\] 4.2 模型建立 神经网络训练拟合根据寻优函数的特点构建合适的BP神经网络,用非线性函数的输入输出数据训练BP神经网络,训练后的B ...

  4. Django中ORM中的get与filter区别

    本文出自 “orangleliu笔记本” 博客,出处http://blog.csdn.net/orangleliu/article/details/38597593 Django的orm中get和fi ...

  5. C#的关键字Explicit 和 Implicit

    一.explicit和implicit explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符:implicit 关键字用于声明隐式的用户自定义的类型转换运算符. 总结来说: ...

  6. js 运动的应用 新浪微博

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. python3.4.3 调用http接口 解析response xml后插入数据库

    工作中需要调用一个http的接口,等不及java组开发,就试着用python去调用.Python版本3.4.3 完整的流程包括:从sqlServer取待调用的合同列表 -> 循环调用http接口 ...

  8. 【Python】2.14&2.15学习笔记 运算符与表达式

    太爽了,今天可以尽情熬夜了,明天不上课,可以学一整天\(Python\) 运算符 \(+,-,*,%\)就不说了,说几个和\(c\)不太一样的 除法 print( 5/3 ) 输出了\(1.66666 ...

  9. (转)浅析epoll – epoll函数深入讲解

    原文地址:http://www.cppfans.org/1418.html 浅析epoll – epoll函数深入讲解 前一篇大致讲了一下epoll是个什么东西,优点等内容,这篇延续上一篇的内容,主要 ...

  10. 今天开dev的时候,config update一下别人的,但是忘了自己改过目录了,导致光看ip,想了半天,为什么接口不对

    今天开dev的时候,config update一下别人的,但是忘了自己改过目录了,导致光看ip,想了半天,为什么接口不对 baseUrl: {     //     // dev: 'http://1 ...