大家好!我是锦视,从事IT技能开发近12年,参与及独立负责过大大小小的项目不少于60个,接触过个各行各业,具有丰富的项目开发及管理经验,来渠道意图是记载自己职业生涯中的点点滴滴~~~

前言

软件项目中,无论是小型项目,还是中大型项目,又或者是分布式型项目,都离不开跨域的问题,要解决跨过的问题,咱们就必须要了解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

    • 相同点
      • 会话等级
        都是用于维持一个客户端与服务器端的一个会话
      • 重启服务器或客户端都会丢掉
    • 不同点
      • 存储方法不同
        cookie的数据信息存放在本地,而session的数据信息存放在服务器上。
      • 安全性不同
        cookie存在客户端,自然安全性低,简单被第三方盗取,而session存储在服务端,只需服务器没有病毒,就很安全。
      • 域支撑规模不同
        cookie能够作用于二级域名,而session不行。

    注:除了以上还有其他差异,更多详细材料请寻觅其他材料,session,会话操控,如果没有耐久化,Web服务器重启会丢掉,一般与cookie一同运用。cookie, 也归于会话等级,只不过是客户端的,只需没有对其耐久化,封闭浏览器也会丢掉。一般与session一同运用。session一般存储在服务器端,存储的value能够是恣意数据类型,key为字符串,生命周期长于cookie,而cookie存储在客户端,存储的大小也有限制。

  • token&jwt

    • 相同点
      • 都是用于身份认证
      • 都是由服务器端生成
      • 都是有失效时刻
      • 服务器端不必存储用户信息,凭据自带
      • 都是拜访资源的令牌
      • 都是使服务器无状况化
    • 不同点
      • 组成部分不同
        jwt一般由header/payload/sigature三部分组成,而token则能够不必
      • 加解密方法不同
        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的简单解说,如有不恰当之处,还望大家指出,共同进步~~~