HttpSession概述
session也是一个域对象之一,它的范围是在一个会话范围之类有效,session既然是域对象,那么当然就要有getAttribute()和setAttribute()系列的方法了
Token概述
1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
Session与Token的异同
1、Session是存放在服务器端的,可以保存在:内存、数据库、NoSQL中。它采用空间换时间的策略来进行身份识别,若Session没有持久化落地存储,一旦服务器重启,Session数据会丢失。
2、Token是放在客户端存储的,采用了时间换空间策略,它也是无状态的,所以在分布式环境中应用广泛。
技术选型依据业务而来,特定的场景适合特定的业务,一般购物车功能会采用Session验证,接口校验一般会采用Token验证,具体采用何种方法,需要大家根据自己的业务进行选择。
Servlet HttpSession | Token (放在Header中) | |
支持的客户端 | 浏览器(SessionID) | 浏览器 , 手机app , 小程序(自定义 , 只要能发http请求的都可以) |
生成 | Tomcat | 代码自己生成 |
储存 | Tomcat储存 | 缓存服务器储存 (都是存入服务器的内存中) |
请求如何传递 | Cookie(标准Header),URL后SeesionID | HTTP header , 自定义Token字段 |
如何过期 | 按默认或者指定时间:手动设置 | 自定义过期时间,让缓存失效 |
如何替换 | 不能 | 在用户正在操作但是Token快过期时,自动请求置换重新生成一个新的Token |