cookie、token

94 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

前言

cookie、token有时候知道他们是干嘛的,但有时候又感觉有点混乱,今天抽空再来探索一番,加深印象。http请求是一种独立的请求,不涉及到状态的变化,那这时用户端和服务端的互相传递信息就会出现问题,因为服务端不知道你已经来过了,服务端只知道有人来过,但不知道是谁。针对这个问题就可以使用cookie和token来解决。

cookie

cookie是浏览器存储在计算机上的内容,是以键值对的形式存储的,当浏览器向服务器发请求时,服务端会建立一个session,并保存在数据库中。然后会向请求浏览器返回一个sessionId,浏览器存的cookie就是这个id。当浏览器再一次请求服务器的时候,服务器只有验证了这个sessionid有效的情况才会做出相应的回应。

cookie的缺点:

  • 每次发送请求都会自动带上cookie,浪费网络资源。
  • cookie可能被人为的修改,在http环境下是以明文形式传输的,只有在https下才会加密传输。
  • cookie非常小,只有4k左右。
  • 可以认为禁用
  • 不支持跨域

token

说起token就不得不提到jwt了,也就是JSON web token,token是一种没有状态的验证码方式,token一般是在登录成功后由后端生成返回给浏览器的。之后的请求在需要token的接口中加上token就可以了,token一般会放在header中,当然了,如果需要也可以作为请求接口的参数,这只要和后端人员商量好即可。

token的有点:

  • 可以防止CSRF
  • 可以多站点
  • 支持移动端使用,cookie不支持移动端
  • token不用服务器存储,只需用户端自己存储就可以了,这是因为token一般是由用户信息和一个秘钥加密生成的,这时候只有服务端有秘钥可以解读消息,所以服务端就不用存储token了,它只需要把收到的token解密之后,再用自己的秘钥加密和传过来的token对比一下是否一致就知道这个token是不是伪造的了。

我们项目中的token一般会放在header中,字段名是Authorization,如下图:

image.png