终于有人说清楚了Cookie、Session、Token的区别。详解,面试题

前言:

众所周知,我们访问网页一般都是使用http协议,而http协议的每一次访问都是无状态的。
何为无状态?就是这一次请求和上一次请求是没有任何关系的、互不认识的、没有关联的。这种无状态的好处就是快速,坏处就是无法把两次请求关联起来。

Cookie、Session、Token就是用来做持久化处理的,目的就是让客户端和服务端互相认识,将两次请求关联起来。

【文章末尾给大家准备了大佬的福利】

终于有人说清楚了Cookie、Session、Token的区别。详解,面试题_第1张图片

Cookie:

  • Cookie是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。
  • Cookie由服务器生成,通过响应头Set-Cookie字段发送给浏览器,浏览器把Cookie以Key Value形式保存到某个目录下的文本文件里,下一次请求同一个网站时就会把Cookie发送给服务器。由于Cookie是存储在客户端上的,所以浏览器加入了一些限制确保Cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的Cookie数量是有限的。
  • Cookie在项目中的应用场景: 日常登录一个网站,今天输入用户名密码登录成功了,第二天无需要重新输入用户名和密码。这个时候用到的一个机制就是Cookie。 浏览器记录用户浏览过的网页。
  • 总结:
    • Cookie由服务器生成,存储在客户端。
    • Cookie的数据格式为键值对,Cookie数据有失效时间看expire值。
    • 在项目中主要用于记住用户名密码或记录用户浏览过的网页。

Session:

  • Session从字面上解释就是“会话”。服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次想服务器发请求时,都带上这个“身份标识”,服务器就知道这个请求来自于谁。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,默认采用Cookie的方式。
  • 服务器使用Session把用户的信息临时保存在服务器上,用户离开网站后Session会被销毁。这种用户信息存储方式相对于Cookie来说更安全,可是Session有一个缺陷就是如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候Session会丢失。
  • session在项目中的应用场景: 一般只保存登录用户的用户名,时长默认是30分钟,所以为什么当你登录系统后一段时间不使用就需要重新登录,因为30分钟后Session就已经丢失了。
  • 总结: Session由Web服务器生成,保存在服务端。 Session的数据格式也是键值对。 Session默认失效时间为30分钟。一般在浏览器的开发者工具(F12)的响应头的Cookie(或Set-Cookie)中查看,在项目中主要用于鉴权判断是否登录状态,只有是登录状态才可以访问服务器的网页和数据。

Token:

  • Token字面意思就是“令牌”,用户身份的验证方式,有点类似于Cookie,相对来说更安全。
  • 产生的过程:

  1. 用户第一次登录,服务端会产生一个Token,Token会存在于服务器的数据库上,然后将这个Token返回给浏览器。
  2. 客户端收到Token之后会将Token存储在本地上。
  3. 客户端再次发送请求的时候,会将Token发送到服务器上。
  4. 服务端收到这个Token时会将Token与自己本地的Token进行比较,得以来验证身份。

  • Token在项目中的应用场景:
  • 一般用于App项目登录鉴权或接口鉴权。因为App项目和接口客户端都不是浏览器,因此就没有Cookie和Session。所以通过Token来鉴权。
  • 有些系统的Token直接显示在后面的页面上,而接口的Token一般在登录接口的返回值里面。
  •  重点:学习资料学习当然离不开资料,这里当然也给你们准备了600G的学习资料
  •  从软件测试到测试开发全套视频+文档+项目+简历模板+面试宝典

    需要的小伙伴可以点击小编主页

    ,验证消息填写000即可获取喔

     一、Python编程入门到精通

    二、接口自动化项目实战

    三、Web自动化项目实战

    四、App自动化项目实战

    五、一线大厂简历

    六、测试开发DevOps体系

    七、常用自动化测试工具

    八、JMeter性能测试

    九, 银行业务测试

    十,大数据测试和业务分析

     

     十一:项目实战

你可能感兴趣的:(github)