为什么要使用token,token与session区别是什么

 2020-04-16 

一、session的状态保持及弊端
当用户第一次通过浏览器,使用账号密码访问服务器时,服务器会验证用户数据,验证成功后会在服务器写入session数据(服务器端会存储用户的session数据),向客户端浏览器返回sessionid,浏览器将sessionid存储在cookie中。
当用户再次访问服务器时,会携带sessionid发送请求,服务器会拿着sessionid从数据库获取session数据,然后进行用户信息查询,查询到,就会将查询到的用户信息返回,从而实现状态保持。

在这里插入图片描述
弊端:

  1. 服务器压力增大
    通常session是存储在内存中的,每个用户通过认证之后都会将session数据保存在服务器的内存中,而当用户量增大时,服务器的压力也增大。
  2. CSRF跨站伪造请求攻击
    session是基于cookie进行用户识别的,cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。
  3. 扩展性不强
    如果将来搭建了很多的服务器,虽然每个服务器执行的是同样的业务逻辑,但是session数据是保存在内存中的(不是共享的),当用户第一次访问的是服务器1,下次可能访问的是另一台服务器2,此时服务器2是获取不到session信息的,就会判定用户没有登录过。

二、token认证机制
token与session的区别在于:

  1. 认证成功后,服务器会对当前用户数据进行加密,生成一个加密字符串token,返回给客户端(此时服务器并不进行保存)
  2. 浏览再将接受到的token进行存储,存localStorage可以在使用时通过js代码获取,存cookie就会每次请求都会携带token。看需求。
  3. 再次访问时服务器端对token值的处理:服务器对客户端传来的token值进行解密,解密后进行用户数据查询,如果查询成功就会认证成功,实现状态保持。所以即使用户访问有多台服务器,服务器要做的也只是对token进行解密,再查询用户数据。它不需要在服务器端去保留用户的认证信息或者会话信息,这就意味着基于token认证机制的应用不需要考虑用户在哪一台服务器登录了。这就为应用的扩展提供了便利,解决了session扩展性的弊端。

在这里插入图片描述