如何理解​session、cookie、token的区别与联系?

session、cookie、token。 相信学过接口的朋友都特别熟悉了。

但是对我一个刚接触接口测试的小白来说,属实有点分不清楚。

下文就是我通过查阅各种资料总结出来的一点理解,不准确的地方还请各位指正。

(文末送洗浴中心流程指南)

产生背景

网络中http协议本身是无状态协议。

无状态协议的意思是:客户端向服务器请求数据时,每一次的请求和上一次都是没有任何关联的(特点:快!)。网上有一个经典的例子(看一次笑一次)可以帮助大家理解。
在这里插入图片描述
夏洛:楼上住的是马冬梅家吗?(第一次请求)
大爷:马什么梅?
夏洛:马冬梅。(第二次请求)
大爷:什么冬梅?
夏洛:马冬梅!(第三次请求)
大爷:马冬什么?
夏洛:没事,大爷您歇着吧。
这位大爷就可以理解为web服务器。为了让这位大爷无状态的服务器能记住上一秒我是谁,cookie、session、token就横空出世,各显神威了。

cookie

一句话概括:服务器产生,只保存在客户端,客户端后续请求都需要携带cookie,供服务器识别身份。
产生过程:

1.客户端第一次访问服务器,服务器并不认识这是谁,于是创建一组数据放到一个叫做’Set-Cookie’的字段里发送给客户端,数据格式为’key=value’

2.客户端收到Set-Cookie字段的数据后,将数据保存到浏览器本地,下次请求时会自动将这个’key=value’放到cookie中发送到服务器

3.服务器收到请求后,就可以根据cookie字段中的值识别其身份,并提供服务。

分析

作为一名测试,一听就知道,这种放在客户端的数据肯定不安全,有可能被拦截并恶意使用,所以cookie用来保存一些不重要的信息,比如我们常见的记住用户名、浏览记录等。

拓展

那么cookie具体是存放在哪里呢?

以chrome为例,右上角点击‘…’,选择设置,点击左侧隐私设置和安全性,然后选择Cookie及其他网站数据,最后点击查看所有 Cookie 和网站数据
在这里插入图片描述
在不信任的环境下可以清除这里面的数据。

也可以通过F12查看我们当前网页存的cookie数据,以我自己的csdn博客为例
在这里插入图片描述
cookie数据有失效时间,看expire值。

session

一句话概括:session就是一个会话信息。保存在服务器上,客户端每次请求时带着sessionID(一般放在cookie里)即可。
产生过程
1.客户端访问服务器

2.服务器收到后生成一个sessionID发送给客户端,同时,服务器也把sessionID和对应的用户信息、操作记录等记录在服务器上(记录方式有很多,文件、数据库、内存都可以)。

3.客户端再次访问服务器时,会带着包含sessionID的cookie

4.服务器再次收到请求,发现cookie里有sessionID,然后去之前自己记录的信息找这个sessionID,找到后就可以知道该sessionID对应的用户信息、操作记录等信息。

5.客户端退出,则会话结束,session失效(但不绝对),所以服务器也为session设置了一个失效时间,默认为30分钟。

分析

session相对于cookie来说更安全,所以一些重要信息会存放在session中。但session会在一定时间内(默认半小时)保存在服务器上,当访问增多,会比较占用你服务器的性能。

session还有一个最突出的缺陷就是可拓展性差,比如服务器有两台机器,我通过机器A登录了系统,那么我的信息,也就是session就会保存在机器A上,但如果我下次的请求发到了机器B上怎么办?机器B上可没有存我的sessionID。

虽然大家也研究出来了一些应对办法,但都很麻烦且不能算完美解决(主要是我看不太懂,不过在学习接口测试前期,了解session的工作机制及其优缺点就暂时够用)。

token(令牌)
一句话概括:用户登录成功后,服务器用一堆复杂的数据加算法进行加密并签名后,返回一个token给客户端,作为客户端的唯一身份标识,客户端后续请求带着这个token即可。

产生过程

1.用户通过用户名和密码进行登录

2.服务器验证后,根据算法生成token返回给客户端,同时给数据库和Redis里关联token和用户信息

3.客户端收到token并保存,再次发送请求时把token放到http的请求头里。

4.服务器查询数据库和Redis,验证(解密)token,通过则返回数据

分析

token作为目前比较常用的登录验证方式, 我理解的其最明显优势:

1.无状态。token放到http的头里,相当于无状态访问,服务器不用存数据,只需要验证token,相当于用token的解密时间换取session的存储空间。

2.安全。服务器生成token时会用到各种算法进行加密/签名,且这套算法只有他自己知道,听起来就比前边两种安全多了。而且我们在登录的时候可以带上一些参数(比如设备ID、mac地址)发送给服务器用来加密,服务器解析token时如果这些参数的值发生变化了,就会验证不通过,这样就保证了每一个设备拥有了一个唯一的会话。

token是有时效的,一段时间之后用户就需要重新验证。

3.可拓展性。支持跨域访问和跨平台(比如支持移动设备)访问,在不同的服务器上,只要token校验规则相同,就可以请求到数据和资源。

思考

最后,通过一个生活中的例子加强对三者的理解:

比如你去洗浴消费,你就相当于客户端,洗浴中心相当于服务器。

你来到前台说要洗澡(登录成功),这时会给你个手牌(token)作为你身份认证标识,进去洗澡、搓澡、打盐(这些服务会记在你的手牌号上并通知前台)一通享受后,出来结账,前台会通过你的手牌号码(sessionID)查一下你进行了哪些服务,结完账,临走前洗浴中心送了你一张打折券(cookie),下次来别忘了带(存你本地了),见券打8折。

学习安排上

如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

在这里插入图片描述

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群即可自行领取

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值