• 0
  • 1
分享
  • 【面试高频】cookie、session、token——软件测试圈
  • quinn 2022-04-06 14:44:08 字数 1709 阅读 553 收藏 1

在以往的面试记录里,我又看到了一个多次被问到的知识点,那就是 cookie、session、token 的区别有哪些?如果现在来问你,不知道你能否说清楚呢?

今天不仅仅是整理出这三者的区别,更重要的是能够真正去理解这三者之间的作用和联系。

cookie、session、token三者联系

在互联网里,一样事物的诞生往往是为了解决某种问题,这句话同样适用于此。

其实说到底,cookie、session、token 都围绕了一个点:身份认证。

为什么要认证

很简单,比如电商购物网站需要登录。在输入账号密码点击登录之后,对服务器就产生了一次会话 session,就像你我之间进行了一次交谈,我根据你的名字样貌记住了你。那么服务器也需要能够记住你,需要把大家区分开来。

但是,由于http协议是无状态的,已经登录过的用户没法通过协议层把状态保存下来,所以下次再请求的时候,服务器还是不知道你是谁。

有什么办法呢?

Session

当服务器收到登录请求之后,生成一个 session id 一起返回给客户端,客户端下次再请求的时候把 session id 一起带上。这时候每个客户端请求对应各自的 session id ,服务就知道怎么区分了。

Cookie

而客户端与服务器之间的会话,一般会使用 Cookie 来管理。

服务在向客户端返回响应时,会在首部字段Set-Cookie内写入 Session ID(如 PHPSESSID=028a8c…)。

图片1.png

客户端接收到从服务器端发来的 Session ID 后,会将其作为 Cookie 保存在本地。

比如我登录了一个论坛,浏览器 F12 就可以看到保存在本地的 cookie。

图片 2.png

产生的问题

由于服务器也要保存这 session信息用于跟客户端传过来的进行比对,数量小了还好,请数量大了,服务器要保存的内容页就越多,会吃不消。

此外,还会影响服务器的拓展能力。比如服务由2台机器组成一个集群,而我之前登录后,session id保存在服务器A上,但是下次请求如果发送到服务器B就不行了,因为人家没存,所以不认。

还会有如下等问题:

  • 对于非浏览器的客户端、手机移动端等不适用,因为session依赖于cookie,而移动端经常没有cookie

  • 因为session认证本质基于cookie,所以如果cookie被截获,用户很容易收到跨站请求伪造攻击。并且如果浏览器禁用了cookie,这种方式也会失效

  • 前后端分离系统中更加不适用,后端部署复杂,前端发送的请求往往经过多个中间件到达后端,cookie中关于session的信息会转发多次

  • 由于基于Cookie,而cookie无法跨域,所以session的认证也无法跨域,对单点登录不适用

服务器:唉!该死的 sessionid,要是可以不用该多好呀 o(╥﹏╥)o。

Token

嗯?其实这个事情核心在于身份认证,想个办法既能解决认证,又不用服务器保存不就好了:

  1. 客户端使用用户名和密码请求登录

  2. 服务端收到请求,验证用户名和密码

  3. 验证成功后,服务端会签发一个 token 令牌,再把这个token返回给客户端

  4. 客户端收到 token 后可以把它存储起来,比如放到cookie中

  5. 客户端每次向服务端请求资源时需要携带服务端签发的 token,可以在 cookie 或者 header 中携带

  6. 服务端收到请求,然后去验证客户端请求里面带着的 token,如果验证成功,就向客户端返回请求数据

重点就是在于服务端可以不用保存 token。

比如,当第一次收到客户端传过来的用户名和密码时,服务器认证通过后,通过加密算法生成一个字符串当做 token。当拿到后续请求中的 token,服务器再解析这个token,可以从中获取关键的信息,从而判断该token的有效性。

目前接触到的大多数系统,都是基于token验证来的,因为它的优点更适合当下的系统应用环境:

  • 无状态,可以更方便扩展

  • 更安全,可以防止跨站请求伪造 CSRF

  • 方便多平台跨域

  • 可以标准化,比如基于JWT Json web token (JWT)


作者:把苹果咬哭
链接:https://juejin.cn/post/7068463922516328479

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 在 Postman 中还有两个很重要的概念是环境Environment 和变量Variable。在讲解变量之前,需要先讲解一下环境,因为很多变量都和环境有关系。什么是环境 Environment?环境是由一组键值对形式的环境变量构成的变量组合。它有什么用?在做接口测试的时候,通常需要在本地调试,或者需要在开发环境、测试环境及开发环境运行,不同的环境的域名(host)、数据库配置等设置不同。通过配置不同的环境变量值,再在请求中使用不同的值,那么可以通过切换环境来切换不同的值,以达到不用修改任何请求就能在任意环境运行。在团队使用 Postman 的过程中,无需每个人都去配置这些环境,环境可以导出为...
            0 1 1574
            分享
          • 读者提问:开发说这不是 BUG,怎么办?阿常回答:那你觉得是 BUG 吗。首先,测试要有自己的判断,不能开发说啥就是啥。其次,我们来看看 BUG 常见的四种类型:代码错误、界面优化、设计缺陷、需求问题。一、代码错误代码错误,即功能错误(功能没有实现)。如果判断下来是这类问题,测试可以在需求文档中找到描述该功能的地方,用记号笔着重划线标记,再传给开发看,相信开发立马就准备修这个 BUG了。二、界面优化界面优化问题,即页面显示问题(比如错别字、排版、布局、字体大小等)。如果判断下来是这类问题,我们可以找 UED 确认是否需要修改(错别字不用说,必须要改),UED 会从用户体验的角度来判断是否需要做...
            0 0 1348
            分享
          • 本文提供了一种轻巧的内存泄漏测试方法及其python实现,该方法在Lenovo Bamboo系统的验收测试活动中得到过诸多检验,是一种易用有效的内存泄漏测试方法。一、内存泄漏测试原理1、内存泄漏的危害。内存泄漏的危害不必多说,会导致系统的可用内存越来越少,影响系统长时间运行的稳定性。2、常用的内存泄漏测试方法一般而言,可概括为两种思路:1)内存分配、释放工具检查如valgrind等内存测试工具。2)Linux系统性能监测如zabbix等linux性能监测工具,以及团队自研的检测linux性能的工具。在方法一中,工具的原理一般是通过检查当程序动态分配内存后,是否有释放来判断有没有发生内存泄漏。其...
            1 2 2083
            分享
          • 移动应用特点与传统的PC软件系统相比,移动应用开发成本相对低廉,具有很好的便携性,极高的碎片时间利用率,很强的用户粘性及忠诚度,尤其随着网络及智能移动设备的迅速发展,移动应用占据了用户日常生活的大部分,人们常说的“手机控”“低头族”也充分说明了移动应用发展前景的火爆。移动应用具有以下几个特点。1、应用场景多变有了移动应用,人们参与互联网活动不再局限于办公室、家庭或其他固定场所,随处可见的“低头族”足以说明移动应用的应用场景广泛。图10-1低头族2、高便携性以手游为例,传统的游戏有端游、页游,都需在PC上运行,随着掌上游戏机的发展,渐渐地将游戏移植到便携设备上,发展至今非常火爆的手游,如王者荣耀...
            0 0 1316
            分享
          • 前言从2017年6月开始接触自动化至今,已经有2年多了,从17年接触UI自动化(unittest+selenium)到18年接触接口自动化(unittest+requests)再到18年自己编写自动化平台(后台使用python的flask,前端使用element+vue,没有第三方自动化框架),不断的学习成长,加深了对自动化测试的理解,这边就总结下自己对自动化测试的认识。首先,吐槽一下很多实际自动化经验不到1年的而且停留在靠度娘抄袭demo的甚至度娘抄袭的代码都不知道问题出在哪的小白(大神忽略,本人小白,只是吐槽一下行业现状),相信很多人从度娘上抄袭个uniitest(下文简称ut),pyte...
            0 0 3467
            分享
      • 51testing软件测试圈微信