进阶之路--从0开始学接口测试(2)--cookie,session,token

为什么我们访问曾经登录过的网页的时候,不用再重新输入用户名和密码?是因为第一次登录之后,服务器会像客户端发送cookie,里面记录了我们的用户信息和用户操作

Cookie(客户端存储数据)

客户端存储的用户相关的数据.是从服务端返回(通过set-cookie响应头),只是实现token和session的手段,是一个请求头字段,可以存放session_id和token的数据,这些数据可以不存储在cookie

 访问过的页面 都会返回客户端cookie

cookie是怎么来的呢,首先要从http协议开始说起,每个接口都要遵守协议才能完成数据的传输,最广泛使用的协议是http协议,但是http协议是一个无状态的协议

无状态是指

服务器没有记忆能力,无法记住客户端之前有没有发送过请求,因此客户端每次发送的请求都是独立的,不会产生依赖关系,造成的问题是,当客户端必须登录才能进行的操作,每次请求都要重复发送用户名和密码给服务器进行校验,频繁发送敏感信息

 需要解决这个问题,我们引进了session的概念

Session(服务端存储数据)

服务端记住客户端,在服务器中保存用户的访问数据

session是让服务器记住信息的一种方式,当用户第一次登录时,发送用户名和密码之后,服务端会生成一个session_id(通过加密),表明属于那个用户,然后在session_id中存储该用户的数据,比如这个用户添加的购物车,登录时间,这些信息会保存在服务器.

接下来服务器会通过cookie的形式(set-cookie)把session_id返回给客户端,每次客户端请求该服务器的时候,会自动带上session_id这个cookie作为参数请求,服务器接收到后查询有没有存储这个session_id的信息(session),然后服务器识别session_id,转换为该用户的数据

session会带来的问题

第一,session需要占用很多服务器的资源(内存),服务器针对每个用户都要创建一个session_id,然后在这个session_id对应的存储空间中存储大量数据.用户每次请求后都需要查询有没有对应的session_id.会影响服务器的速度

第二,每次都要查询,速度很慢,当请求太多的时候,响应时间慢

第三,session通常跟cookie搭配,但是cookie无法跨域(多个服务器).对于设计到多个服务的跨域操作,有很大的局限性.同时,如果涉及到跨域或者多服务器,就需要共享session,必须保证每台服务器都能获取session而要保持数据同步和一致性

我们可以采取数据库保存session,像redis这样的数据库就适合存储session,但是又会有新的问题,服务器每次收到请求都要查询数据库,当访问量太大的时候就会给数据库带来压力,如果数据库挂了.服务器就无法使用

解决的方式是配置redis集群,当单点数据库挂掉的时候,可以使用其他数据库中的数据

虽然最终通过集群管理能解决session的问题,但是工程量和成本相当高

Token

(数据不存储在服务器,通过签名和加密后全部返回给客户端存储)

Token方式,服务器不存储用户数据,而是直接通过编码或者加密的方式把用户数据作为通行证直接返回给客户端,传递的方式由服务端自己设置,每次客户端都携带这个通行证证明自己的身份,从而得到自己的状态和数据,不用查询服务器

但是通行证容易被伪造,不能证明是服务端发给客户端的,所以需要签名

 签名

当用户登录时 服务器提取用户名或者id组装成payload,代表用户数据,然后用header和payload组装成新的数据,通过HS256(哈希算法)这类加密算法得到签名,在拼接header.payload和sign,最后得到token

用户再次访问该服务器,服务器会验证签名是否有该服务器签发,如果一致,表示这是合法的token

哈希算法不可逆,只能加密 不可解密

Token和session的区别

Session:

-存储在服务端,需要专用的服务端,内存,磁盘,数据库

-需要频繁的查询,从而拖慢请求的梳理速度

-跨域麻烦

Token:

-不存在服务端,直接发给客户端存储

-不需要消耗服务器存储资源

-速度快,跨域方便

-不能立即注销,让token失效

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值