做了这么多年测试,还是分不清什么是cookie,什么是session?很正常,很多软件测试工程师可能到现在都搞不清什么是session,cookie相对来说会简单很多。
下面这篇文章希望能够帮助大家分清楚这两个技术的区别和他们对应的使用场景。一).cookie的特点:
cookie是一门客户端缓存技术
cookie数据由服务器生成,发送给浏览器保存
cookie数据的格式:键值对
cookie数据过期机制:设置expire值
cookie是一门客户端技术,一般是由服务器生成返回给浏览器客户端来保存的,并且cookie是以键值对的形式保存在浏览器客户端的,每一个cookie都会有名称,值,过期时间...。
cookie有很多使用场景,在项目中比较常见的有:
1.登录记住用户名
2.记录用户浏览记录
...上面应用中大家最熟悉的应该就是记住用户名这个场景了,以京东网站的登录功能为例,当我们登录了一次京东,后面再去登录页面登录的时候,会发现它会帮你回填之前的用户名,这个场景就是通过cookie技术实现的。1.打开火狐浏览器,访问京东登录页面输入登录账号,密码完成登录:

2.在首页点击退出登录

3.登录页面再次登录发现用户名输入框已经回填了之前的手机号:

4.F12打开火狐浏览器找到保存手机号的这个cookie:"mp",值就是我们填写的用户名信息:

总结:此实现过程:登录成功,将手机号写入到cookie---》回到登录页面再次登录时,根据mp这个cookie的名称取出手机号的值回填到用户名输入框(根据键取出值)

拓展:cookie是有过期机制的,可以通过设置cookie的过期时间来控制cookie什么时候过期

这个mp的过期时间为一个月,因此这一个月内只要不清除浏览器端的cookie数据,那么使用火狐浏览器来访问京东的登录页面都可以看到手机号回填的效果。

二)sessionsession的特点:
session是一门服务端会话缓存技术。
session由服务器端的web容器创建,保存在服务器端。
session保存数据:键值对形式
session过期:默认30分钟
session是服务端的会话技术,当用户登录了系统,服务器端的web容器就会创建一个会话,此会话中可以保存登录用户的信息,并且也是以键值对的形式去保存的,现在大部分系统都是使用的session技术来做的鉴权(权限鉴定),即:当用户登录完了才可以访问系统中的一些页面和数据。

三)session+cookie接口鉴权实战项目讲解【重点】
1.首先直接访问系统cms的首页index.do无法访问成功,会被重定向到登录页面login.do,因为这个系统有做用户鉴权,没有登录的用户无法访问系统里面的数据。

2.现在登录cms系统:

打开F12可以看到,loginJump接口的请求头里有一个“cookie”的头信息,里面就有“JSESSIONID=8C01446270E498C1D879EF6983CC27E7”这个信息,浏览器看到这个数据就知道要把这个数据写到cookie当中,cookie名称为:“JSESSIONID”,值为:“8C01446270E498C1D879EF6983CC27E7”。这个session会话编号就是服务器返回的。服务器端的这个session会话保存了登录用户的信息。

作为cookie缓存后,在浏览器的cookie中就能看到这个数据,如下图:

登录完成后再访问系统中的任何页面都是有没有问题的,因为后面每次请求都会带上浏览器里cookie里面的这个"JSESSIONID"的值过去,如下图,访问"用户管理" 这个菜单的时候,请求这个页面以及页面的任何一个接口请求都会在请求头里面带上这个会话JSESSIONID=8C01446270E498C1D879EF6983CC27E7然后再提交到服务器,如下图的这个请求:

当服务器收到这个请求的“Cookie”请求头里的会话id去服务器匹配,判断是同一个session会话,会话中有登录用户的信息,从而判断这个请求是一个登录用户发出的,从而放行这个请求。
上面这个过程可以用下面的这张图来表示:

四)拓展1:session过期处理。
当服务器端的会话过期了,那么当你继续发起请求的时候,因为你从客户端带过去的会话编号还是之前的那个,就会验证不通过,就会提示你会话过期请重新登录。五)拓展2:token机制
app项目为例:
一般app项目都会基于一个token做鉴权。
因为此时客户端不是浏览器,因此就没有cookie这一说了。
当用户登录app时,服务器会响应回来一个token信息(一般都是返回的一串唯一的标识符,比如说uuid或其他)。
服务器端会将登录用户跟token(票据)保存一个映射关系,一般保存在redis或者表里面,服务器端响应回来的token会缓存在手机的本地缓存里,后面手机去访问app的其他页面,就会带着这个token去服务器做验证,如果通过这个token能够从redis找到登录用户信息那么就认为你是已经登录了的用户。六)token失效:
一段时间后,服务器端的token失效了,那么就会把此token跟用户的映射关系从redis里删掉,那么后面再来访问的时候,根据你手机请求带来的token就匹配不上登录用户了,服务器就告诉客户端,需要去做重新登录了.

七)接口测试中的登录鉴权
大部分项目都会有登录鉴权,鉴权实现方式为以下几种:
a. 服务端会话session机制
b. 服务端分发token机制
这里分享一下这两种机制的实现原理和特点,希望能给大家一些启发,代码设计和实现在大家可以在腾讯课堂搜索"多测师"公开课里面有讲到。
首先聊一聊服务端session,它就相当于一个容器,一种缓存技术,用户登录个网站后,服务端创建会话session保存登录用户的信息,并缓存此session的会讯id-JSESSIONID到客户端浏览器,缓存形式为cookie,用户再访问其他页面的时候请求头里带上这个cookie中的这个信息,用作服务器端校验,校验通过则可以正常访问,一旦服务端的session过期,校验失败,从而系统完成重定向,让你去先登录。
而接口项目中从服务器端返回的会话id,我们怎么取出来缓存起来,然后其他接口如何带上这个信息去访问成为我们的关注点。
再来说说token,在一些app项目中,我们会看到登录鉴权很多都是通过toker机制来实现的。登录成功后,服务器端响应一串唯一的信息作为这个token,客户端获取到这个token缓存在手机本地,在后续访问这个app的时候会带上这个token去服务端做校验,如果能校验通过,那么则放行资源的访问,否则重定向到登录界面要求重新登录。这里分享一篇的博客给大家,帮助大家更好的去了解下cookie和session,以及token: https://www.cnblogs.com/xiaoshubass/p/13114740.html

八、token项目实战【重点】
1、首先访问多测师P2P金融项目首页、调通登录接口后会在响应体中返回token值
2、然后拿到登录接口返回的token值作为登录之后的接口的参数、放置在请求头当中

史上最详细解释接口自动化测试中cookie、session和token的区别【多测师_王sir】相关推荐

  1. 史上最全软件测试工程师常见的面试题总结(四)【多测师_王sir】

    面试:神州数码 1.介绍你下你项目中一个自动化实现的流程   ==>看这篇http://duoceshi.cn/duoceshi/Tech_article/73.html 2.你觉得做自动化的意 ...

  2. 编写一个SQL查询来报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为空 null 【杭州多测师】【杭州多测师_王sir】...

    编写一个SQL查询来报告 Person 表中每个人的姓.名.城市和州.如果 personId 的地址不在 Address 表中,则报告为空  null . 以 任意顺序 返回结果表. 示例 : Per ...

  3. 史上最全软件测试工程师常见的面试题总结【杭州多测师】【面试题】【杭州多测师_王sir】...

    2021.3.8号早上 1.是否接触过自动化测试?若做过,使用什么工具,写过多少自动化测试用例: robotframework+selenium2library selenium 2.是否接触过数据库 ...

  4. 性能测试中常见的专业术语:QPS、TPS、并发数、响应时间(RT)、吞吐率和吞吐量【杭州多测师】【杭州多测师_王sir】...

    一.QPS: 每秒钟处理完请求的次数,注意这里是处理完,单接口看做是一个事务的话,1TPS=1QPS 二.TPS:每秒钟处理完的事务次数,一般TPS是对整个系统来讲的.一个应用系统1s能完成多少事务处 ...

  5. 同步接口和异步接口【多测师_王sir】

    1.定义 同步调用:当一个支付请求被发送到支付渠道方,支付渠道会很快返回一个结果.但是这个结果,只是告诉你调用成功了,不是扣款成功,这叫同步调用 异步调用:同步请求参数里面会有一个回调地址,这个地址是 ...

  6. java中ioc和aop是什么?【杭州多测师】【杭州多测师_王sir】

    一.什么是IOC? 1.IoC (Inversion of control )就是控制反转/反转控制.它是一种思想不是一个技术实现.主要就是用来解决创建和管理对象的 2.就是不需要通过new 关键字来 ...

  7. java当中怎么测试异步接口【杭州多测师_王sir】【杭州多测师】

    测试是软件发布的重要环节,单元测试在实际开发中是一种常用的测试方法,java单元测试主要用junit,最新是junit5,本人开发一般用junit4.因为单元测试能够在软件模块组合之前尽快发现问题,所 ...

  8. 第三方支付接口怎么测试【杭州多测师】【杭州多测师_王sir】

    现在有不少测试朋友做的项目中,可能也会涉及到支付相关的功能.比如:做商城的,做游戏的以及其他在线交易的网站.APP等.如果支付出了问题,或者用户拿少的钱通过篡改请求数据购买大金额的商品,如果是实物的话 ...

  9. 列出每一个部门中年纪最大的员工姓名,部门名称【多测师_王sir】

    多表题目: 列出每一个部门中年纪最大的员工姓名,部门名称 select name,dept_name,age from dept RIGHT JOIN emp e on dept.dept1=e.de ...

  10. 螺旋矩阵【史上最详细解释】

    解题思路:\ 观察一下,螺旋数组其实是按圈走的,每一个圈的起始点都在对角线上(matrix[i][i]),但是一共有几个圈的起始点呢?如果是nn的那么就有n//2个起始点,如果是mn的那就是min(m ...

最新文章

  1. 在winform中从外部拖动节点到树形结构(treeview和listview相互拖动)(一)
  2. android webview 填充,从Android使用WebView自动填充表格
  3. 什么是电子路径用于连接计算机主板上的芯片,计算机的组成部分及功能346.doc...
  4. Redis 桌面管理工具 RedisDesktopManager 2020.1 发布
  5. sourcetree 卡顿_Android卡顿性能监测方案对比
  6. directplay需要安装吗_燃气报警器需要安装吗这里告诉你
  7. 【详解!思路清晰】1095 解码PAT准考证 (25分)
  8. 浅谈html的语义化和一些简单优化,html标签语义化
  9. c++中的IO流(流的概念和流类库的结构,标准的输入输出流)
  10. 电脑home键在哪_电脑键盘各键的名称及使用方法
  11. Android系统性能优化(64)---build.设置
  12. 0配置EF连接MySql数据库_第八节:EF Core连接MySql数据库
  13. 【Python】python list 迭代删除
  14. 注册表知识与技巧大全
  15. 「大数据干货」基于Hadoop的大数据平台实施——整体架构设计
  16. EXCEL MATCH函数
  17. 【最新】Blender资产库纹理灯光 预设打光技巧
  18. php怎么获得今天的日期,PHP怎么获取今天、昨天、明天的日期-php教程
  19. 全桥电路与半桥电路如何连接在一起
  20. 用c语言程序判断谁是小偷

热门文章

  1. Java源码-猜数字小游戏(Swing编程版)
  2. 20170919_C++面试问题记录
  3. 基于SSM框架的电影订票系统
  4. PDF粘贴到word的英文字母的间距很宽,很奇怪
  5. 红外遥控器解码串口输出模块结合51单片机+oled屏幕实现遥控器红外解锁( STC89C52RC)
  6. css通过行内样式绑定背景图片
  7. 企业邮箱在outlook登录邮件如何撤回?
  8. layui 表单去除校验
  9. JetBrains系列产品学生认证申请免费使用教程
  10. java字符常量_字符常量 java