一、前言:接口测试之伤:cookie,session,token本是一家!
cookie,session,token的区别早就已经成为测试同行的心病,各大论坛,各大博客,各大视频网站无不充斥着各种疑问???cookie,session,token本是一家!奈何各位测试同仁总是要把它们分开!各位做测试的小伙伴们只要是做过接口测试或者面试过接口测试都一定会遇到这个问题,在写这篇文章之前笔者也看过很多篇关于session,cookie,token的文章,感觉不是各种复制抄袭,就是泛泛而谈没讲到要点上。希望本篇文章对大家有所帮助!助力大家hold住面试官,hold住了开3万,hold不住开3K。全靠你自己的领悟了。
二、天地初开:http协议诞生
再讲三者的区别之前必须先了解一下http协议,众所周知访问网页都是使用的http协议,而http协议的每一次访问都是无状态的。什么叫无状态?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态的的好处是快速。坏处就是无法把两次请求关联起来。比如下面的对话:
![v2-00c9634f823043d499756838dc3c59fd_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=63687e4a-1e2a-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-00c9634f823043d499756838dc3c59fd_b.jpg)
第一次请求:
夏洛:大爷,楼上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保存的用户信息!
![v2-0b1b6a7832c75a6ef7c5e37b87d3fa23_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=63687e4a-1e2a-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-0b1b6a7832c75a6ef7c5e37b87d3fa23_b.jpg)
总结: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会话保存了登录用户的信息。
![v2-5decc0b9743d68e486a8de8c33541a88_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=63687e4a-1e2a-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-5decc0b9743d68e486a8de8c33541a88_b.jpg)
总结: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等都可以。
![v2-44d58e8b7cbf5edfd78c3c7992d42c2a_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=63687e4a-1e2a-eb11-8da9-e4434bdf6706&url=https://pic3.zhimg.com/v2-44d58e8b7cbf5edfd78c3c7992d42c2a_b.jpg)
六、本是同根生相煎何太急!
![v2-3024a41faab78338973494982029f17f_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=63687e4a-1e2a-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-3024a41faab78338973494982029f17f_b.jpg)
仔细阅读此文后是不是感觉豁然开朗,原来cookie也好,session也好,token也好都是web服务器产生的,只是保存在不同的地方,分别为:客户端,服务器,数据库中,所以他们在项目中的应用场景也不一样!
七、总结
如果你觉得此文对你有帮助,如果你对此文有任何疑问,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣请拉到最上面关注笔者的名字!
一箭三雕:如果你觉得本文对你有帮助,请关注,赞同,分享三连!谢谢!
作者出处:逍遥子:接口测试彻底弄懂Session、Cookie、Token的区别及联系-hold住面试官开3万
转载声明:欢迎转载,但未经作者同意请保留此段声明,并在文章明显位置给出原文链接。