当前位置: 首页 > news >正文

java不同项目加token访问_接口测试彻底弄懂Session、Cookie、Token的区别及联系-hold住面试官开3万...

一、前言:接口测试之伤: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

第一次请求:

夏洛:大爷,楼上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

总结: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

总结: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

六、本是同根生相煎何太急!

v2-3024a41faab78338973494982029f17f_b.jpg

仔细阅读此文后是不是感觉豁然开朗,原来cookie也好,session也好,token也好都是web服务器产生的,只是保存在不同的地方,分别为:客户端,服务器,数据库中,所以他们在项目中的应用场景也不一样!

七、总结

如果你觉得此文对你有帮助,如果你对此文有任何疑问,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣请拉到最上面关注笔者的名字!

一箭三雕:如果你觉得本文对你有帮助,请关注,赞同,分享三连!谢谢!
作者出处:逍遥子:接口测试彻底弄懂Session、Cookie、Token的区别及联系-hold住面试官开3万
转载声明:欢迎转载,但未经作者同意请保留此段声明,并在文章明显位置给出原文链接。

相关文章:

  • python operator 多属性排序_Python应用——自定义排序全套方案
  • 随机森林原始论文_初识随机森林
  • CNN Matlab例子RGB_CNN网络基础
  • js date 当前日志往后一个月_因为造轮子,我一个月就转正了 | 原力计划
  • apache tomcat下32还是64_Tomcat 下载、安装、配置图文教程
  • sqlserver安装目录_Windows 2016中安装SQLServer2016 Failover Cluster
  • springmvc @requestbody_【面试系列7】Spring MVC
  • python实现程序安装_python实现查找所有程序的安装信息
  • python中os模块_python中的os模块
  • 怎么python画好几朵玫瑰花_怎么用python画玫瑰花,求大神贴代码,感激不尽
  • 51单片机电路原理图_10个定时器精选电路方案带你学习时钟脉冲的工作方式
  • python读取数据的函数详解_python如何从文件读取数据及解析
  • wxpython的安装步骤_wxPython的安装图文教程(Windows)
  • python findall函数_python re模块findall()函数实例解析
  • pip环境变量配置 python3.6_win10下Python3.6安装、配置以及pip安装教程
  • 【个人向】《HTTP图解》阅后小结
  • android 一些 utils
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • C++入门教程(10):for 语句
  • java8 Stream Pipelines 浅析
  • k8s 面向应用开发者的基础命令
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • SOFAMosn配置模型
  • 聚簇索引和非聚簇索引
  • 浏览器缓存机制分析
  • 你不可错过的前端面试题(一)
  • 巧用 TypeScript (一)
  • 如何用vue打造一个移动端音乐播放器
  • 使用Gradle第一次构建Java程序
  • 数组的操作
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 一些关于Rust在2019年的思考
  • 责任链模式的两种实现
  • 智能合约Solidity教程-事件和日志(一)
  • 06-01 点餐小程序前台界面搭建
  • 整理一些计算机基础知识!
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)Dubbo快速入门、介绍、使用
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转载)虚函数剖析
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .java 9 找不到符号_java找不到符号
  • .net 后台导出excel ,word
  • .NET 回调、接口回调、 委托
  • .Net 路由处理厉害了
  • .NET 中创建支持集合初始化器的类型