Cookie/session/token/jwt

1. cookie

  • 长度有限制,一般最大4k,存储在浏览器在中,受同源策略限制,不能跨域访问。
  • 一般是明文传输,容易被篡改,不要在里面放用户名、密码等敏感信息。
  • 每次请求,浏览器会自动带上cookie。

2. session

  • 存储在服务端,占用服务端的资源。
  • 客户端通过cookie中的会话id与服务端的session关联,也可以把sessionId放到url、隐藏表单中传给服务端。
  • 相对安全,因为关键信息都存储在服务器端。

3. token

  • 客户端每次请求都带上token,服务器通过一定的规则来校验token,以此验证用户身份。
  • 单点登录SSO一般用token来实现。

4. jwt

  • 值是json格式的,作用跟token类似。
  • 通常存储在客户端,每次http请求的时候带上,通常放在http header中的authorization中。
  • jwt分成3个部分:
    • 头部:包含Token类型(通常是JWT)和使用的加密算法。
    • 载荷:包含用户的身份信息、权限、过期时间等声明(Claims)。
    • 签名:由头部和载荷通过指定的加密算法生成,用于验证 Token 的完整性和真实性。

5. 相同和不同

5.1. sessionId和token

  • 相同之处:都可以用于客户端和服务器之间的用户身份识别和用户会话机制。用户登录后,服务端生成一个唯一的标识,可以是token或SessionId,在后续的请求中,客户端将这个标识发送给服务器。
  • 不同之处:
    • sessionId需要与服务器上的session对象关联,服务器需要维护session的生命周期,所以会占一些内存;token只需要服务端按逻辑校验token的合法性即可,不会占太多服务器的内存。
    • session对象是一个服务器上生成的,所以在集群场景下,其他机器也要共享到这个session的状态,比如加分布式缓存之类的;token不会在服务器上存储状态,所以集群场景下扩展性很好。

5.2. 存储位置

  • Cookie存储在浏览器端;
  • Session存储在服务器端;
  • Token和JWT可存储在客户端(如浏览器本地存储或Cookie中),也可以在请求中作为Authorization头的一部分发送。

5.3. 安全

  • Cookie相对较不安全,容易被窃取;
  • Session存储在服务器端相对安全,但如果服务器被攻击,Session数据也可能泄露;
  • Token和JWT通过加密和签名等方式提高了安全性,但如果密钥泄露,也会存在风险。

5.4. 可扩展性

  • Token和JWT适合分布式和微服务,因为它们可以在多个服务之间共享,不依赖服务器端的Session;
  • Cookie和Session在跨域场景下可能会受到限制。

5.5. 生命周期管理

  • Cookie和Session的生命周期可以由服务器控制,但需要考虑浏览器的行为和会话超时等因素;
  • Token和JWT的生命周期由其自身的过期时间决定,客户端需要在Token过期前重新获取新的Token。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值