在软件测试面试中经常会被问到关于cookies、session、token的相关问题,在做接口测试时,心里不免会有一些疑惑,一会 Cookie,一会又 Session,接口有时还需要带着 Token,这三个到底是什么关系呢?
我们都知道 HTTP 协议是无状态的,所谓的无状态就是客户端每次想要与服务端通信,都必须重新与服务端链接,意味着请求一次客户端和服务端就连接一次,下一次请求与上一次请求是没有关系的。
这种无状态的方式就会存在一个问题:如何判断两次请求的是同一个人?就好比用户在页面 A 发起请求获取个人信息,然后在另一个页面同样发起请求获取个人信息,我们如何确定这俩个请求是同一个人发的呢?
为了解决这种问题,我们就需要一种方式知道发起请求的客户端是谁?此时,cookie、token、session 就出现了,它们就可以解决客户端标识的问题,在扩大一点就是解决权限问题。
cookie
cookie是访问网站时,由网站服务器返回的一种标记为cookie 类型数据,cookie 数据存放在客户的浏览器(客户端)上;cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。
作用:通过cookie直接获取在线状态
Session会话
-
当登录成功后,session第一次被创建,一个唯一的标识被存储于本地的cookie中的sessionid中。
-
再次打卡浏览器后回去数据库查session的id去比对
用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session,请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器,浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中。
区别:
1.session在服务器端,cookie在客户端(浏览器)
2.session默认被存在在服务器的一个文件里(不是内存)
3.session的运行依赖session id,而session id 是存在cookie 中的,也就是说,如果浏览器禁用了cookie ,同时session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
session 是基于 cookie 实现的,它们两个主要有以下特点:
session 比 cookie 更加安全,因为它是存在服务端的,cookie 是存在客户端的。
cookie 只支持存储字符串数据,session 可以存储任意数据。
cookie 的有效期可以设置较长时间,session 有效期都比较短。
session 存储空间很大,cookie 有限制。
系统想要实现鉴权,可以单独使用 cookie,也可以单独使用 session
cookie+session 是实现认证的一种非常好的方式,但是凡事都有两面性,它们实现的认证主要有以下缺点:
增加请求体积,浪费性能,因为每次请求都会携带 cookie。
增加服务端资源消耗,因为每个客户端连接进来都需要生成 session,会占用服务端资源的。
容易遭受 CSRF 攻击,即跨站域请求伪造。
那么为了避免这些缺点,token 方式的鉴权出现了。
Token
token 的组成:
从数据库中的session的读取会导致网站性能慢,影响数据库水平扩容等,从而产生了Token。
Token包含数据信息(data)和验证信息(HMAC)的整体数据结构,放在http协议里返回给客户端。
数据信息改变,验证信息也会跟着改变,存储在客户端,不需要对数据库的访问。
总结
虽然前面解释了 cookie、session、token的相关内容,它们的目的都是一样的:鉴权和认证。
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。