session、cookie和taken的区别

http是无状态的协议,所以要维持应用的会话形式,就需要加入以下几种机制,来进行会话跟踪,识别用户身份(当同一用户进行多次操作,不用反复请求建立新的连接,从而节省服务器资源和处理速度)

  生成位置 存储方式 验证原理 特点

cookie

(记录用户身份)

服务器

在客户端浏览器内以文件形式存储(键值对name=value)

常见包括name(cookie名称)、path(对于服务器其他页面的可用性)、domain(顾名思义,同域内的其他服务器共享可用性)、secure(该属性若未出现,这意味着cookie在网络中未加密传输;secure属性并不能对Cookie内容加密,因而不能保证绝对的安全性。如果需要高安全性,需要在程序中对Cookie内容加密、解密,以防泄密。)

1.用户通过用户名和密码 发送请求

2.服务器生成cookie(服务器针对客户端状态的一小段文本信息)并在响应头中返回

3.在之后的请求中携带cookie,服务器进行检查(如前所示,这些信息都可被篡改和截取)

1.安全性较差,攻击者可截取cookie进行目标权限的操作

2.需要浏览器支持

3.不可跨域

session

(记录用户状态)

服务器

服务器 redis数据库、file(php)、内存(tomcat)中。存储形式为hash(key-field-value);包括sessionid(为随机生成字符串)该id会写入cookie中发至客户端。

同时Session需要使用Cookie作为识别标志,因为Session不能依据HTTP连接来判断是否为同一客户

1.用户通过用户名和密码 发送请求

2.服务器生成session(包括sessionid、sessionid对应的key值)存储在服务器中,之后发送cookie(值为sessionid)在响应头中返回

3.在之后的请求中携带cookie(sessionid),服务器进行检查(根据sessionid来查找目标session,比对是否一致)

拓展性较差(若服务器存在负载均衡,session只存在了其中某台)
token 服务器

客户端、服务器(只保存未到期却注销的token,以便下次收到使用这个token时判其无效)

一般包括uid(用户唯一的身份表示)、time(时间戳)、sign(签名、密钥等)、URL(请求的路径)

1.用户通过用户名和密码 发送请求

2.服务器进行验证(用户合法性)

3.服务器签发一个签名的token(生成过程可参考对称加密)给客户端

4.客户端存储并在每次发送请求携带该token

5.服务器通过特定的加密算法对token进行过滤选择(比如HMAC)

6.校验通过返回增删改查数据;校验未通过返回错误码

1.无状态、可拓展(因为token并)

2.相对安全(可防止CSRF攻击)

3.可拓展性强(可分享权限给第三方应用)

4.多平台跨域(完全由应用管理)

5.基于标准化

假设一个场景,有一栋大楼有门禁。

cookie机制:只要你带通行证不管你是谁都可以进来,只认通信证,cookie在这里是通行证。

session机制:要报你的门牌号户主姓名电话号码,大楼门卫在信息表里找到对应的就会放行。session在这里是信息表里的门牌号户主姓名电话号码。

token机制:检验通行证,同时需要对暗号“天王盖地虎”---“宝塔镇河妖”,暗号错一个字都不行。token在这里就是通行证和暗号。

 

如有纰漏望不吝赐教!

 

posted @ 2020-03-19 19:20  周瑜不是菊花兄  阅读(928)  评论(1编辑  收藏  举报