token登录验证机制与session登录验证机制的优缺点

分类:计算机 | Web开发 | 登录认证 | 综合 1514
更新:2020-06-06 00:10:05
编辑

原文地址

https://blog.csdn.net/weixin_42237752/article/details/88655511

1 token登录验证机制

前几天研究了一下springboot security的一个项目,分析了源码,里面就是在使用token的登录验证机制,主要使用过程如下图,登录后根据security的安全算法生成一个唯一的token值(基于JWT),然后存储到redis中,并设定过期时间,之后把token值返回前台,前台保存到localStorage中,然后每次访问的时候都需要提交token作为验证,验证通过则可以访问接口。

2 session登录验证机制

1、服务端session是用户第一次访问应用时,服务器就会创建的对象,代表用户的一次会话过程,可以用来存放数据。服务器为每一个session都分配一个唯一的sessionid,以保证每个用户都有一个不同的session对象。
2、服务器在创建完session后,会把sessionid通过cookie返回给用户所在的浏览器,这样当用户第二次及以后向服务器发送请求的时候,就会通过cookie把sessionid传给服务器,以便服务器能够根据sessionid找到与该用户对应的session对象。
3、session通常有失效时间的设定,比如2个小时。当失效时间到,服务器会销毁之前的session,并创建新的session返回给用户。但是只要用户在失效时间内发送了新的请求给服务器,服务器就会把它对应的session失效时间根据当前的请求时间再延长2个小时。
4、session在一开始并不具备会话管理的作用。它只有在用户登录认证成功之后,并且往session对象里面放入了用户登录成功的凭证,才能用来管理会话。管理会话的逻辑也很简单,只要拿到用户的session对象,看它里面有没有登录成功的凭证,就能判断这个用户是否已经登录。当用户主动退出的时候,会把它的session对象里的登录凭证清掉。所以在用户登录前或退出后或者session对象失效时,可定都是拿不到需要的登录凭证的。

3 两种登录验证的优缺点

貌似看这两种登录验证没有什么差别,但是其实差别很大,token的验证机制比session的验证机制更加灵活方便。

与session验证相比token的优点:
1、支持跨域访问:cookie是不允许跨域访问的,这一点对token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输。
2、无状态:token机制在服务端不需要存储session信息,因为token自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储状态信息。
3、更适用CDN:可以通过内容分发网络请求你服务端的所有资料(如:javascipt、HTML、图片等),而你的服务端只要提供API即可。
4、去耦:不要绑定到一个特定的身份验证方案。token可以在任何地方生成,只要在你的API被调用的时候,你可以进行token生成调用即可。
5、适用接口跨平台: 当你的客户端是一个原生平台(iOS, Android,Windows 8等)时,Cookie是不被支持的(你需要通过Cookie容器进行处理),这时采用Token认证机制就会简单得多。