背景:
最近在总结一些容易理解混淆的概念,之前面试的时候提到过,我觉得也说不清楚,这两天项目做接口测试发现用的cookie而不是之前的token,于是总结一下,便于以后用到的时候再阅读以及分享给需要的人。后期如果发现总结不对会持续更新
从安全性优先级来说:
1、优先级
Cookie<session<token
2、 安全性
Cookie:
①cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
②HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie
客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
session:
① session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
② 关闭浏览器不会关闭session,它具失效日期,失效后服务器认为客户端停止了活动,并删除session以节省空间
Token:
① 作为身份认证 token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击
② Oauth token提供的是认证和授权,认证针对用户,授权针对app
③ token的生成一般是采用uuid保证唯一性,当用户登录时为其生成唯一的token,存储一般保存在数据库中。token过期时间采用把token二次保存在cookie或session里面,根据cookie和session的过期时间去维护token的过期时间
开发过程举例:
案例一:
项目中我们的用户数据可能需要和第三方共享,或允许第三方调用我们的API则用token
案例二:
公司内部的网站,自己的App,就可以用cookie、session
一般来说我们可以将登录信息放在session,其他信息保存在cookie
案例三:
观察微信、支付宝登录接口用的就是token