session、token、jwt 区别

5 篇文章 0 订阅
2 篇文章 0 订阅

序言

在网上看了很多博客,说法比较多,我想说下关于我自己的理解,可以简单理解他们都是为了解决 http 无状态特性产生的一些鉴权问题

问题

首先用户登录完成后,http 不能保存这个状态,后续的请求,服务器是不知道我们是否有请求的权限的,为了解决这个问题,引入了下面几种常见的技术

session

1. 通过 session 机制,相当于服务器为客户端开辟的一个存放登录信息的房间,并把钥匙返回给客户端。

2. 每个客户端访问都会带上自己的钥匙(session id),服务器收到请求后打开对应的房间,看它是否登录过,这样就达到了鉴权,也就是保存登录状态的作用

正常可能就这样用到天荒地老了,但是架不住互联网的飞速发展,下面两个问题也就必须要解决了~

缺点:

1. 存储,session 中保存的信息是占用服务器内存的,这个用户量大的话,消耗还是很多的

2. 集群,服务端如果做了负载均衡,就可能导致用户请求到某台没有保存 session 的服务器,解决这个问题

        (1) 在所有负载服务器之间同步 session,每个服务都要保存一份完整的 session,当然会造成较大资源浪费

        (2) 共享 session,这个一般用第三方存储来实现,比如 redis,也  就解决了这个问题,而且 redis 是支持集群的,比较容易扩展

token、jwt

网上很多在对比他们两个的区别啥的,其实我是觉得可以把 jwt 理解为 token 的某种实现方式(jwt 有规范,token 是自定义的,具体区别自行百度),都是为了解决session 的两个问题,下面我统称为 Token

1. 用户登录完成,服务器给客户端签发 Token。 区别来了,这时候服务器自己不存信息,而是把信息存放在 Token 中返回给客户端,后续访问客户端携带 Token

2. 服务器每次都会从 Token 中解密信息并校验是否合法,这样也完成了鉴权,是不是完美解决了 session 的问题呢  (1) 存储 (2) 集群(服务器不需要保存登录信息,只需要验证token) 

缺点:

缺点很明显,Token 过期问题 ~ ~

session 模式,用户关闭浏览器,对应的 session 也就自然过期了,下次打开重新登录,这是比较安全的

1. Token 是发放给客户端的令牌,虽然也可以设置过期时间,但是这个时间定多少比较合适呢?这是个问题,短了用户老是要登录,长了不安全

2. 而且如果两个人登录,我希望让其中一个 Token 失效,这种确实不好处理

这时候有朋友说了,上边两个都不是问题呀,1. 我也在 session 失效的时候,就删除 Token 2. 每次我都保存用户最新的 token不就行了,确实可以解决,但是这就又引入了 session 和 存储,并不是不行,只是这样就丧失了 Token 的优势(解密就可以认证,不需要引入存储和保存客户端的状态)

总结

session 和 Token 方式都是为了解决某些问题

比如一般的登录认证,我认为 session 还是有优势的,而且也可以引入 redis 来解决分布式的问题

而一些接口间的认证,则可能 Token 模式会更适合一些,具体要根据自己的场景来分析用哪种技术,并不是一定就是哪种好 ···

抱歉文笔不行,可能废话比较多,让观众老爷受累了 ~~

感谢您的阅读,如果对您有所帮助,欢迎点赞、关注、收藏!文章中有任何错误,或者您有更好的理解和建议,也欢迎和我联系!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值