Cookie,Session和Token

2020-05-28  本文已影响0人  竖起大拇指

为什么需要Cookie

Http是无状态的协议(对于事物处理没有记忆能力,每次客户端和服务端会话完成时,服务端不保存任何会话信息);每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。所以服务器与浏览器为了进行会话跟踪,就必须主动的去维护一个状态。而这个状态需要通过cookie或者session去实现。
cookie存储在客户端:cookie时服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。
cookie是不可跨域的:每个cookie都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名是允许共享使用的(靠的是domain)。

什么是Session

session是另外一种记录服务器和客户端会话状态的机制
session是基于cookie实现的,session存储在服务器端,sessionId会被存储到客户端的cookie中


微信图片_20200528160217.jpg

session的认证流程:

Cookie和Session的区别

什么是Token

AccessToken

分布式架构下 session 共享方案

1.Session赋值

任何一个服务器上的session发生改变,该节点会把这个session的所有内容序列化,然后广播给所有其他节点,不管其他服务器需不需要session,以此来保证session同步。
优点:可容错,各个服务器间session能够实时响应
缺点:会对网络负荷造成一定的压力,如果session量大的话可能会造成网络堵塞

2.粘性session/IP绑定策略

采用Ngnix中的ip_hash机制,将某个ip的所有请求都定向到同一台服务器上,即将用户与服务器绑定。用户第一次请求时,负载均衡器会将用户的每次请求转发到A服务器上,如果负载均衡器设置了粘性session的话,那么用户以后的每次请求都会转发到A服务器上,相当于把用户和A服务器粘到了一块,这就是粘性session机制。
优点:简单,不需要对session做任何处理
缺点:缺乏容错性,如果当前访问的服务器发生故障,用户被转移到第二个服务器上时,它的session信息都将失效。

3.Session共享

使用分布式缓存方案比如Memcached,Redis来缓存session,但是要求Memcached或Redis必须是集群。
把session放到Redis中存储,虽然架构上变的复杂,并且需要多访问一次Redis,但是这种方案带来的好处也是很大的:
实现了Session共享
可以水平扩展(增加Redis服务器)
服务器重启session不丢失
不仅可以跨服务器session共享,甚至可以跨平台(例如网页端和App端)

上一篇下一篇

猜你喜欢

热点阅读