• 浅析Session、cookie、token及jwt的区别和适合的使用场景
  • 发布于 2个月前
  • 441 热度
    0 评论
  • Dock
  • 0 粉丝 54 篇博客
  •   
前言

软件项目中,无论是小型项目,还是中大型项目,又或者是分布式型项目,都离不开跨域的问题,要解决跨越的问题,我们就必须要了解session、cookie、token及jwt的区别和使用场景,包括其定义,本文从概念、区别及使用场景三个方面来展开讲解,纯理论,无技术实战。


概念
session
session在网络应用中称为“会话控制”,是服务器为了保存用户状态而创建的一个特殊的对象。简而言之,session就是一个对象,用于存储信息。
cookie
cookie,有时我们也用其复数形式 cookies,是服务端保存在浏览器端的数据片段。. 以 key/value的形式进行保存。. 每次请求的时候,请求头会自动包含本网站此目录下的 cookie 数据。
token
token是指互联网项目中的一种访问资源的凭证,有了这个凭证就可以任意访问服务器上的资源,而且只要不过期,其在任意浏览器都可以使用。
jwt
JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。

区别
session&cookie
相同点
1.会话级别都是用于维持一个客户端与服务器端的一个会话
2.重启服务器或客户端都会丢失

不同点
1.存储方式不同
cookie的数据信息存放在本地,而session的数据信息存放在服务器上。
2.安全性不同
cookie存在客户端,自然安全性低,容易被第三方窃取,而session存储在服务端,只要服务器没有病毒,就很安全。
3.域支持范围不同
cookie可以作用于二级域名,而session不行。
注:除了以上还有其他区别,更多详细资料请寻找其他资料,session,会话控制,如果没有持久化,Web服务器重启会丢失,一般与cookie一起使用。cookie, 也属于会话级别,只不过是客户端的,只要没有对其持久化,关闭浏览器也会丢失。一般与session一起使用。session一般存储在服务器端,存储的value可以是任意数据类型,key为字符串,生命周期长于cookie,而cookie存储在客户端,存储的大小也有限制。

token&jwt
相同点
1.都是用于身份认证
2.都是由服务器端生成
3.都是有失效时间
4.服务器端不用存储用户信息,凭证自带
5.都是访问资源的令牌
6.都是使服务器无状态化

不同点
1.组成部分不同
2.jwt一般由header/payload/sigature三部分组成,而token则可以不用
3.加解密方式不同
4.jwt使用非对称加解密,更安全,而token是AES/CBC/PKCS5PADDING等加解密,使用aes解密的数据可以解密出来。

: token可以说是另外一种jwt的表现形式,在实际项目中,如果项目对安全性不是特别的高,一般使用token就够了。


使用场景
session&cookie
不需要考虑不同浏览器共享同一会话的场景,sesion和cookie一般结合起来使用,cookie的value即为session的key,6年前的项目一般是这种方式。
token
一般用于不同客户端使用相同登录凭证的场景,例如: sso/分布式系统等。
jwt

Authorization (授权) : 这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。


Information Exchange (信息交换) : 对于安全的在各方之间传输信息而言,JSON Web Tokens无疑是一种很好的方式。因为JWT可以被签名,例如,用公钥/私钥对,你可以确定发送人就是它们所说的那个人。另外,由于签名是使用头和有效负载计算的,您还可以验证内容没有被篡改。

总结

使用cookie需要考虑安全性、容易被篡改、不要存储敏感信息、尽量减少cookie的体积,使用httponly等;而使用session需要考虑内存、集群方式需要考虑session共享的问题,移动端对cookie的支持不是很好,而session需要基于cookie实现,所以移动常用的是token;使用token和jwt需要考虑失效时间,因为存储了部分用户的信息,为了安全性还可以对其二次加密等。针对token和jwt的使用,需要考虑加密算法,常见的有MD5算法、SHA1算法、AES/DES/3DES算法等。


以上就是对session、cookie、token及jwt的简单讲解,如有不恰当之处,还望大家指出,共同进步~~~

用户评论