http无状态是指http的每一次请求都是一次单独的请求
比如:…
因为每个请求都是独立的,所以单个请求需要的所有信息都必须要包含在请求中一次发送到服务端,这导致单个消息的结构需要比较复杂,必须能够支持大量元数据
身份验证流程:
1.用户向服务器发送用户名和密码。
2.验证服务器后,相关数据(如用户角色,登录时间等)将保存在当前会话中。
3.服务器向用户返回session_id,session信息都会写入到用户的Cookie。
4.用户的每个后续请求都将通过在Cookie中取出session_id传给服务器。
5.服务器收到session_id并对比之前保存的数据,确认用户的身份。
session一般来说要配合cookie使用,因为用户信息存储到cookie也就是浏览器上面很不安全,就出现了session
session是在服务端建一个表,里面存储了用户信息,每次根据sessionid去表里面查用户
session的工作原理
Session的弊端:
Session 信息存到服务器,必然占用内存。用户多了以后,开销必然增大。为了提高效率,需要做分布式,做负载均衡。
Token 传递的过程跟 Cookie 类似,只是传递对象变成了 Token
具体流程:
和token的区别
Token需要查库验证token 是否有效,而JWT不用查库或者少查库,直接在服务端进行校验,并且不用查库。因为用户的信息及加密信息在第二部分payload和第三部分签证中已经生成,只要在服务端进行校验就行,并且校验也是JWT自己实现的。
为什么JWT不用验证token是否有效
jwt的查询流程
解析JWT
判断签名是否正确,根据生成签名时使用的密钥和加密算法,只要这一步过了就说明是payload是可信的
判断JWT token是否过期,根据exp,判断是否是VIP,根据isVip
JWT版是没有查库的,他所需要的基础信息可以直接放到JWT里,服务端只要判断签名是否正确就可以判断出该用户是否可以访问该接口,当然JWT里的内容也不是无限多的,其他更多的信息我们就可以通过id去查数据库