cookie、session和token原理

目录

1 背景     

2 cookie

2.1 cookie原理

2.2  cookie面临的问题

3 sesssion

3.1 sesssion原理

3.2  sesssion面临的问题

4 token

4.1 token原理

4.2  token优势


1 背景     

 用户数量的增多,传统的服务端存储session的方式,面对负载均衡多服务器的部署方式,不好解决用户登录的问题。面对这两个问题,出现了token的验证方式,下面均益数一下三者的区别和问题,以及解决方案。

2 cookie

2.1 cookie原理

       cookie是存在浏览器的标识用户的方式,由服务端为每一个用户签发不同session id发送给浏览器并存储在cookie,下次访问会带上这个session id,服务端就知道这个访问是哪个用户了。

2.2  cookie面临的问题

  • CSRF(跨站请求伪造)攻击,这个也好解决,很多框架都屏蔽这个问题
  • 有的客户端不支持cookie,需要手动设置,比如小程序
  • 浏览器对cookie有限制,不能手动设置cookie,对于混合嵌套的开发有问题,比如小程序跳转H5页面,不能携带cookie
  • 浏览器对单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

3 sesssion

3.1 sesssion原理

       session是存储在服务端标识用户的方式,服务端为每个用户生成不同的session id,还有与之相对应的信息,比如用户id和登录时间等。通过服务端的session和浏览器的cookie一一对应,来区分这个用户是谁。

3.2  sesssion面临的问题

  • 负载均衡多服务器的情况,不好确认当前用户是否登录,因为多服务器不共享seesion。这个问题也可以将session存在一个服务器中来解决,但是就不能完全达到负载均衡的效果。
  • 每个客户端只需存储自己的session id,但是服务端却需要存储所有用户session id,对服务器也是一个压力

4 token

4.1 token原理

(1)客户端第一次请求时,发送用户信息到服务器。服务器对用户信息使用HSA256算法及密钥进行签名,再将这个签名和数据一起作为token返回给客户户端。

(2)服务端不再保存token,客户端保存token。

(3)当客户端再次发送请求时,在请求信息中将token一起发送给服务器。

(4)服务器用同样的HSA256算法和密钥,对数据再计算一次签名,和token的签名做比较

(5)如果相同,服务器就知道客户端登录过,则反之。

4.2  token优势

         服务端把用户信息加密(token)传给客户端,客户端每次访问都返回token,服务端解密token,就知道这个用户是谁了。通过cpu加解密,服务端就不需要存储session id占用存储空间,就很好的解决负载均衡多服务器的问题了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章