三者的目的都是为了维持前端页面的登录状态。
Cookies
实现流程:
优点:
-
存储在客户端
-
帮助在客户端和服务端之间维护状态信息
缺点:
-
安全风险:因为存储在客户端,有被串改的风险
-
容量限制:4KB
-
可用限制:用户可能禁用(通过浏览器禁用)
Session
上述的操作中,除了在服务器上session的存储和拿取,其他的操作都是自动的。
优点:
-
安全性高:存储在服务端
-
容量大:可以保存对象
缺点:
-
占用服务器资源
-
扩展性差(分布式情况需要共享各个微服务之间的session)
-
依然需要依赖cookie跨域限制(记得配置跨域)
JWT(Json Web token)
JWT就是加密生成之后的JSON字符串。
注意:前后端是不会存储JWT字符的,因此JWT被称为无状态的认证机制。
可以将JWT比喻成一个篮球,在两个人(前后端)练习传球中,将篮球(JWT)相互传递给对方,但是都不会将篮球占用(不将JWT存储在本地)
优点:
-
无需服务器存储状态:不会对JWT进行存在
-
安全性高:JWT支持数字签名或加密
缺点:
-
Token大小增加
-
无法废止:一旦被签发,就只可以通过设置有效期让它废止
-
无法改变:JWT包含的信息一旦被签发,无法被改变。