搞测试的,Cookie、Session、Token、JWT 傻傻分不清楚可不行

今天的内容,主要是围绕Cookie、Session、Token、JWT 来介绍的,相信大家平常也会有傻傻分不清的时候,今天我们就来好好理一理。

什么是 cookie


HTTP 是无状态的协议:每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次请求的发送者是不是同一个客户端。服务器与浏览器为了进行会话跟踪,就必须主动的去维护一个状态,这个状态用于告诉服务端前后两个请求是否来自同一个浏览器。这个状态就需要通过 cookie 或者 session 来实现。

cookie 存储在客户端:cookie 是服务器发送到用户浏览器,并进行保存到本地的数据,它会在浏览器下次向同一服务器再发起请求时被再一次被带到并发送到服务器上面

cookie 是不可跨域名的:每个 cookie 都会绑定单一的域名,无法在别的域名下获取使用

什么是 Session


session 是区别 cookie 的另一种记录服务器和客户端会话状态的机制

session 是基于cookie 实现的,session 存储在服务器端,sessionid 会被存储到客户端的 cookie 中


session 认证流程

用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 session

服务器响应客户端的请求,并返回唯一标识信息 sessionid 给浏览器

浏览器把返回的 sessionid 存储到 cookie 中,同时 cookie 记录次 sessionid 属于哪个域名

当用户第二次访问服务器的时候,请求自动判断此域名下是否存在 cookie 信息,如果存在就将 cookie 信息发送给服务端,服务端会从 cookie 中获取 sessionid,再根据 sessionid 查找对应的 session 信息,如果找到 session 证明用户已经登录,可以执行后面操作,如果没有找到,说明用户没有登录或者失败。

cookie 和 session 的区别


安全性:session 比 cookie 安全,session 是存储在服务器端,cookie 是存储在客户端

存储值的类型不同:cookie 只支持存字符串数据,设置为其它类型的数据,需要将其转换成字符串,session 可以存任意数据类型。

有效期不同:cookie 可设置为长时间保持,session 的失效时间比较短,客户端关闭就会失效

存储大小不同:单个 cookie 保持的数据不能超过 4KB,Session 存储数据高于 cookie,当访问量过多,会占用更多的服务器资源。

什么是 Token(令牌)


访问接口(API)时所需要的资源凭证,比如订单接口需要带上登录返回的 token 值,才能访问订单接口数据

常见的 token 组成:UID(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token+ 请求数据进行几次 md5 之后的值)

token 的特点:

服务端无状态化、可扩展性好

支持移动端设备

安全性好

支持跨程序调用

token 的身份验证流程:


①、客户端使用用户名和密码,请求登录

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

③、验证成功之后,服务端返回一个 token,并把这个 token 发送给客户端

④、客户端收到 token 之后,会把它存储起来,放入 cookie 里面

⑤、客户端每次想服务器请求资源的时候,都需要带着这个 token

⑥、服务端收到请求的时候,验证客户端请求里面带着的 token,如果验证成功,就向客户端返回请求的数据

每一次请求都需要携带 token,需要把 token 放到 HTTP 的请求头里面

基于 token 的用户认证,服务端不用存放 token 数据。

Token 和 session 的区别


Session 是一种记录服务器和客户端会话状态的机制,使服务端有状态化,可以记录会话信息。

token 是一种令牌,访问接口(API)时需要的凭证,也像古代进入到城里需要腰牌一样。token 使服务器无状态化,不会存储会话信息。

token 的安全性要好于 session,每次请求都有签名,也就会出现每次的 token 都会变化,也可以防止一定的攻击、

什么是 JWT


JSON Web Token(简称 JWT)是目前最流行的跨越认证解决方案。

是一种认证授权机制

JMT 是在网络应用环境之间传递声明,而执行的一种基于 JSON 的开发标准

JWT 的认证流程:


客户端将 token 保存到本地(通常使用 localstorge)

当用户访问一个受保护的路由或者资源的时候,需要请求头的 Authorization 字段中使用 Bearer 模式添加 JWT

服务端的保护路由将会检查请求头 Authorization 中的 JWT 信息,如果合法,则允许用户的行为

JWT 内部保护了一些会话信息,减少了需要查询数据库的需要

JWT 并不使用 cookie,可以使用任何域名提供你的 API 服务,不需要担心跨域的问题

用户的状态不存储在服务端的内存中,是一种无状态的认证机制

Token 和 JWT 的区别


相同点:

都是访问资源的令牌

都可以记录用户的信息

都是使服务端无状态化

都是只有验证成功后,客户端才能访问服务端上受保护的资源

两者的区别:

Token:服务端验证收到客户端发送过来的 token 时,需要查询数据库获取用户信息,验证 Token 是否有效

JWT:将 Token 和请求信息加密后存储在客户端,服务端只需要使用密钥进行校验即可,不需要查询或者减少查询数据库,因为 JWT 自己包含了用户信息和加密的数据

常见的前后端鉴权方式:

Session-Cookie

Token 验证(包括 JWT,sso)

Oauth2.0  

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值