Cookie、WebStorage、Session 和 Token

极重要面试题:Cookie、WebStorage、Session 和 Token

  HTTP协议是“Stateless(无状态的)”,每个请求消息都会获得一个响应消息;响应结束后,服务器不会记录任何客户端的过往访问信息。

  但是,实际项目中,用户登录之后,服务器需要在后续的请求中识别出来当前登录者信息——称为“身份认证(authorization)信息”

具体实现技术有四种:

  ①Cookie:客户端存储——小点心,九十年代就有的技术;本质是服务器生成的“k=v”对,随着响应消息头(set-cookie)一起发送给客户端;客户端存储在document.cookie变量中。下次再发请求时,浏览器会自动把这些Cookie发送给服务器(放在请求消息头cookie中) —— 类似于“老板给顾客身上贴小标签”

提示:浏览器规定,每个服务器在客户端可以保存的Cookie键值对数据量有限制(例如4KB)

  ②WebStorage:客户端存储——2015年HTML5提供的新技术,分为sessionStorage/localStorage两个对象,本质是服务器返回给客户端的数据,客户端自己保存在浏览器内存或磁盘上。下次请求时,客户端自己从WebStorage中读取数据,作为请求数据发送给服务器 —— 类似于“顾客主动拿走老板写的小标签”

提示:浏览器规定,每个服务器在客户端可以保存的WebStorage键值对数据量有限制(一般为5MB)

  ③Session:服务器端存储——九十年代末,Java/PHP/.NET等服务器端技术厂家提出的技术;本质在服务器端为每个客户端开辟一段存储空间(保存在服务器端内存/文件/数据库中),以Cookie形式返回给客户端一个“会话编号(就是一个很长的字符串)”;客户端再次访问时,会自动出示此“会话编号”,服务器据此识别出该用户并找到之前存储的信息—— 类似于“老板给顾客办会员卡(号),自己保留所有的客户记录

提示:session技术安全/可靠性比客户端存储高;但是会增加服务器端处理负担,尤其是大数据/高并发的项目中;且无法用于集群。

  ④Token:客户端存储——令牌,最新技术;本质是服务器把客户端的信息保存在一个对象中(数据大小无限制),使用加密技术加密为一个长度固定的密文字符串(称为token),以响应消息头或主体形式发送给客户端;客户端需要存储在WebStorage中,下次请求时,以请求参数/消息头/主体形式发送该令牌给服务器;服务器收到该令牌检查其完整性,解密其中的信息,从而获得该客户端的身份信息 —— 类似于“老板用只有自己懂的鸟语把顾客的信息写在纸条上,让顾客带回家”。

使用token实现“登录后获取个人信息”

客户端

服务器

第一次请求:登录

1、客户端发送简单请求,包含uname和upwd

2、服务器验证登录信息,成功后,把客户端信息保存在一个对象中,形如:{

   用户编号:123,

   用户名:yaya,

   登录时间:x年x月x日 xx:xx:xx,

   登录过期时间:x年x月x日 xx:xx:xx

   ….    

}

3.服务器将上述对象加密为定长字符串(即token);随同响应消息一同返回给客户端:

{

  code:200, msg: 'login succ',

  token: '加密后的定长字符串'

}

4.接收到响应消息,把其中的token保存在客户端

uni.setStorageSync('userToken',  res.token)

第二次请求:获取个人档案

5.从客户端读取之前保存的token

let  token=uni.getStorageSync('userToken')

6.发送请求消息,把token放在请求消息头中(与后端协商好的请求头)

uni.request({

   url,

   header:{ authorization: token }

})

生成的请求消息形如:

GET  /user/get_basic.php  HTTP1.1

authorization: ''加密后的字符串''

7.服务器接收到请求消息,从请求头中读取authorization(即token),解密令牌,得到原始的令牌信息,即:{

   用户编号:123,

   用户名:yaya

   登录时间:x年x月x日 xx:xx:xx,

   登录过期时间:x年x月x日 xx:xx:xx

   ….

}

8. 服务器根据用户信息查询数据库,将用户信息返回给客户端

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值