session是有状态的,一般存放于内存,数据库或文件中。
当服务器采用分布式或者集群的时候session就会面临负载均衡的问题。
解决session的负载均衡:负载均衡多服务器的时候无法确定当前用户是否登陆,因为多服务器是不共享session的。其中的一种方法是将session存放于一个服务器中,根据请求源的 IP 的散列(hash)来选择要转发的服务器,这种方式可以一定程度上保证特定用户能连接到相同的服务器。。如果你的应用需要处理状态而要求用户能连接到和之前相同的服务器,可以考虑采取这种方式。
但这种方式还是没有彻底的解决负载均衡问题,如果后端有服务器宕机,那么这台服务器的Session丢失,被分配到这台服务请求的用户还是需要重新登录。
而token是无状态的。token字符串中保存了所有的用户信息。
客户端登陆传递信息给服务端,服务端收到后把用户信息加密(token)传给客户端,
客户端将token存放于localStroage等容器中。客户端每次访问都传递token,服务端解密token,就知道这个用户是谁了.
jwt跨域认证方案:
jwt就是一个加密的字符串,作为验证信息在计算机之间传递。jwt是服务器生成的,通过请求传递给客户端,客户端可以任意方式存放,所以服务器就不需要存放jwt信息,这样就避免了当用户基数大,session对内存消耗。也加快了认证速度。