JWT
传统的 session 流程
浏览器发起请求登陆
服务端验证身份,生成身份验证信息,存储在服务端,并且告诉浏览器写入 Cookie
浏览器发起请求获取用户资料,此时 Cookie 内容也跟随这发送到服务器
服务器发现 Cookie 中有身份信息,验明正身
服务器返回该用户的用户资料
JWT 流程
浏览器发起请求登陆
服务端验证身份,根据算法,将用户标识符打包生成 token, 并且返回给浏览器
浏览器发起请求获取用户资料,把刚刚拿到的 token 一起发送给服务器
服务器发现数据中有 token,验明正身
服务器返回该用户的用户资料
你发现了吗?好些并没有什么区别,除了 session 需要服务端存储一份,而 JWT 不需要
但实际上区别大了去了
session 存储在服务端占用服务器资源,而 JWT 存储在客户端
session 存储在 Cookie 中,存在伪造跨站请求伪造攻击的风险
session 只存在一台服务器上,那么下次请求就必须请求这台服务器,不利于分布式应用
存储在客户端的 JWT 比存储在服务端的 session 更具有扩展性
…
Redis
1.与其他用户状态保存方案比较
一般开发中用户状态使用session或者cookie,两种方式各种利弊。
Session:在InProc模式下容易丢失,并且引起并发问题。如果使用SQLServer或者SQLServer模式又消耗了性能
Cookie则容易将一些用户信息暴露,加解密同样也消耗了性能。
Redis采用这样的方案解决了几个问题,
1.Redis存取速度快。
2.用户数据不容易丢失。
3.用户多的情况下容易支持集群。
4.能够查看在线用户。
5.能够实现用户一处登录。(通过代码实现,后续介绍)
6.支持持久化。(当然可能没什么用)