cookies、session和jwt的一些优缺点
先来说说cookies和session实际应用中的一些不足
- 【缺点】cookies的安全性不好,攻击者可以通过获取本地cookies进行欺骗或者利用cookies进行CSRF攻击。
- 【缺点】使用cookies时,在多个域名下,会存在跨域问题。
- 【缺点】session在一定的时间里,需要存放在服务端,因此当拥有大量用户时,也会大幅度降低服务端的性能。
- 【缺点】当有多台机器时,如何共享session也会是一个问题,也就是说,用户第一个访问的时候是服务器A,而第二个请求被转发给了服务器B,那服务器B如何得知其状态。
jwt
- 【优点】使用JWT不需要后端进行记录,减轻服务器压力,每个token都是独立的。
- 【优点】jwt不存在跨域问题,后台生成token返回到前台,前台保存到本地,每次请求在请求头携带token给后台进行验证即可。
- 【缺点】token生成和验证都需要后台计算,而且由于每次向服务器发起请求都要携带token,太大了会造成请求缓慢。
- 【中性】session比JWT好的地方在于在请求时浏览器会自动带http头部带上cookie,并且在用户持续使用时会不断地刷新session的过期时间,当浏览器关闭时自动清除session。相比之下JWT本身没法做到随着用户的使用而更新或手动清除,只能等自动过期
jwt实现
分析
编码:一个token是一串base64字符,大概分成head、payload、sign三部分,这三部分以 . 分割。其中head记录的是加密算法,payload记录的是你定义的一些信息,sign则是head(base64字符) + payload(base64字符) + 秘钥的加密base64字符。
解码:在payload保存过期时间,解码时判断是否过期。head(base64字符) + payload(base64字符) + 秘钥再加密看是否等于sign,不等于则被改动过。
代码实现