接口测试基础-cookie、session、token学习

目的:了解cookie和session区别,并且了解app端为什么不用cookie、session,而用token。

 

一、了解cookie和session区别

我们在请求头中经常会见到如下的部分:

Cookie: ZC8sid=m5PMgK; AJSTAT_ok_pages=5; AJSTAT_ok_times=1;ZC8cookietime=2592000;ZC8_auth=e558Bn9amQVa818V1epYBenUnNCUXW7vdUc3XZdMLRsVI26O40Bd5CqE%2F4Oj47WW245X04JeCjpyiUxBDwBpiJEfI0dxow;checkpm=1; supe_cookietime=2592000;supe_loginuser=wg101523413;supe_activationauth=9f6dNKMyRfxDJ82LeRptq1GkxzAzGTsCTAcF9B6DTI94uxzoK%2FOo2A

在响应头中也经常看到set-cookie,那那么cookie是干嘛用的呢?和session的区别在哪儿呢?

通过图解http书中两张图学习一下:

Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

从这两张图可以看出,cookie分为setCookie和Cookie,前者为响应头字段,后者为请求头字段;而请求头和响应头均包含Session ID,响应头包含的Session ID字段是为了记录用户认证状态,请求头中Session ID是方便服务端来判断客户端是否为真实的用户。接下来我们详细看下两者的区别:

1.session在服务器端,cookie在客户端(浏览器)

2.session默认被存在在服务器的一个文件里(不是内存)

3.session的运行依赖session id,而session id 是存在cookie 中的,也就是说,如果浏览器禁用了cookie ,同时session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)

4.用户验证这种场合一般会用session

因此,维持一个会话的核心就是客户端的唯一标识,即session id ;cookie目的可以跟踪会话,也可以保存用户喜好或者保存用户名密码;session用来跟踪会话。

二、为什么app端不用cookie、session,而用token

那么app中为什么很少看到用cookie或session,而要用token呢?这三者有什么区别呢?

首先了解下REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。 简单来说,RESTful API 是基于HTTP协议产生的一种相对简单的API设计方案,属于无状态传输。RESTful 的核心是 everything is a “resource”,所有的HTTP action,都应该是相应resource上可以被操作和处理的,而API 就是对资源的管理操作,而这个具体操作是由 HTTP action 指定的。

App通常用restful API跟server打交道。Rest是stateless的,也就是app不需要像browser那样用cookie来保存session,因此用session token来标示自己就够了,session/state由API server的逻辑处理。

如果你的后端不是stateless的rest API, 那么你可能需要在app里保存session,可以在app里嵌入webkit,用一个隐藏的browser来管理cookie session.

session 和 oauth token 并不矛盾,作为身份认证token安全性比session好,因为每个请求都有签名sign(Sign怎么生成的:将所有用户请求的参数按照字母排序(包括timestamp,token),然后根据MD5加密(可以加点盐),生成sign签名,这就是所说的url签名算法。),所以token+sign还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全了。

参考资料:《图解HTTP》——[日]上野 宣



作者:晓莫莫
链接:https://www.jianshu.com/p/3246d5926bdb
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值