Session、Cookie和Token的区别

1. Cookie

  • Cookie是存储在浏览器端的一小段文本,可以用类记录用户的身份信息等数据。
    如何通过 cookie 来实现用户确定或者权限的确定呢?
    在这里插入图片描述
  1. 客户端发送请求到服务端(比如登录请求)。
  2. 服务端收到请求后生成一个 session 会话。
  3. 服务端响应客户端,并在响应头中设置 Set-Cookie。Set-Cookie 里面包含了 sessionId,它的格式如下:Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]。其中 sessionId 就是用来标识客户端的,类似于去饭店里面,服务员给你一个号牌,后续上菜通过这个号牌来判断上菜到哪里。
  4. 客户端收到该请求后,如果服务器给了 Set-Cookie,那么下次浏览器就会在请求头中自动携带 cookie。
  5. 客户端发送其它请求,自动携带了 cookie,cookie 中携带有用户信息等。
  6. 服务端接收到请求,验证 cookie 信息,比如通过 sessionId 来判断是否存在会话,存在则正常响应。

2. Session

  • Session是存储在服务器端的一组数据,用于记录用户的会话信息,如登录状态,购物车等。
    暂时无法在飞书文档外展示此内容

3. Cookie和Session联系与区别

联系:
sessionId 是 cookie 和 session 之间的桥梁。

  • Cookie和Session常常一起使用,称谓Session+Cookie,通过在第一次请求时服务器生成一个信物,并要求客户端也定一个信物。每次请求时候你都得带上信物,你我信物一比对,验证通过则认为是同一个会话。
    区别:
  • session 比 cookie 更加安全,因为它是存在服务端的,cookie 是存在客户端的。
  • cookie 只支持存储字符串数据,session 可以存储任意数据。
  • cookie 的有效期可以设置较长时间,session 有效期都比较短。
  • session 存储空间很大,cookie 有限制

4. Token

前面我们说的 sessionId 可以叫做令牌,令牌顾名思义就是确认身份的意思,服务端可以通过令牌来确认身份。

  • Token是一种认证方式,通常代表一小段字符串,可以存储到cookie里,遂请求一起发过去,也可以存在服务器中。
  • Token的认证方式类似于临时的证书签名,是一种服务端无状态的认证方式,非常适用于REST API的场景。所谓无状态就是服务端不会保存身份认证相关数据。
  • Token的安全性比Cookie和Session高,因为它不会被自动添加到请求头中,而是开发者为了防范CSRF而特别设计的令牌,浏览器不会自动添加到headers里,攻击者也无法访问用户的token,所以提交的表单无法通过服务器过滤,也就无法形成攻击
  • Token是被加密后的字符串,通常由uid+time+sign[+固定参数]组成,服务器通过Payload,header和一个密钥(secret)使用Header里面指定的签名算法生成。我们通过jiangtoken解密就可以拿到注入uid这类信息,如何通过uid来进行接下来的鉴权操作。
  1. 客户端发起登录请求,比如用户输入用户名和密码后登录。
  2. 服务端校验用户名和密码后,将用户 id 和一些其它信息进行加密,生成 token。
  3. 服务端将 token 响应给客户端。
  4. 客户端收到响应后将 token 存储下来。
  5. 下一次发送请求后需要将 token 携带上,比如放在请求头中或者其它地方。
  6. 服务端 token 后校验,校验通过则正常返回数据。

5. 区别总结

  • Cookie和Session是存储在客户端和服务端的认证方式,用于记录用户的身份信息和会话信息。
  • Token是一种服务端无状态的认证方式,通常代表一小段字符串,可以存储到cookie里,遂请求一起发过去,也可以存在服务器中。
  • Cookie和Session是Session+Cookie的组合方式,用于在第一次请求时服务器生成一个信物,并要求客户端也定一个信物。Token是一种基于临时证书签名的认证方式,适用于REST API的场景。
  • Token的安全性比Cookie和Session更高,因为他不会被浏览器自动添加到请求头中,而是开发中为了防范CSRF而特别设计的令牌,浏览器不会自动添加到headers里,攻击者也无法访问用户的token,所以提交表单无法通过服务器过滤,也就无法形成攻击。
    在这里插入图片描述
    session是空间换时间,token是时间换空间
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏日一凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值