zoukankan      html  css  js  c++  java
  • 史上最详细解释接口自动化测试中cookie、session和token的区别【多测师_王sir】

    做了这么多年测试,还是分不清什么是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数据,那么使用火狐浏览器来访问京东的登录页面都可以看到手机号回填的效果。

    二)session
    
    session的特点:
    session是一门服务端会话缓存技术。
    session由服务器端的web容器创建,保存在服务器端。
    session保存数据:键值对形式
    session过期:默认30分钟
    session是服务端的会话技术,当用户登录了系统,服务器端的web容器就会创建一个会话,此会话中可以保存登录用户的信息,并且也是以键值对的形式去保存的,现在大部分系统都是使用的session技术来做的鉴权(权限鉴定),即:当用户登录完了才可以访问系统中的一些页面和数据。
    
    以下面的系统为例:
    直接访问系统cms的首页index.do无法访问成功,会被重定向到登录页面login.do,因为这个系统有做用户鉴权,没有登录的用户无法访问系统里面的数据。

     

    2.现在登录cms系统:

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

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

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

    当服务器收到这个请求的“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

  • 相关阅读:
    SQL SERVER NVARCHAR字段INSERT 中文乱码问题解决
    解析$(this).data('type');
    使用HttpWebRequest发送自定义POST请求
    C#使用WebClient下载文件到本地目录
    linux开发时,想用的链接暂存
    程序进行重定位的技术按重定位的时机分类
    文件分类
    快表、页表
    操作系统的发展与分类
    网络操作系统和分布式操作系统的区别
  • 原文地址:https://www.cnblogs.com/xiaoshubass/p/13114740.html
Copyright © 2011-2022 走看看