接口测试基础——cookie、session、token的区别

201 阅读4分钟
目标
什么是cookie
什么是session
cookie和session的区别
什么是token
cookie、session、token之间的区别
1.什么是cookie
1.1 概念

cookie是一种客户端存储数据的技术,它是由服务器发送给客户端的小型文本文件,存储在客户端的浏览器中,大小限制大致在4K左右,客户端发送请求时,浏览器会自动将相应的cookie信息发送给服务器,服务器通过读取cookie信息,可判断出该请求来自哪个客户端。

cookie被取代的原因:

  1. cookie有存储大小限制,4K左右。
  2. 浏览器每次请求会携带cookie在请求头中
  3. 数据可被轻易查看
  4. 编码格式是Unicode,不支持直接存储中文
1.2 cookie的主要属性

image.png

1.3 使用流程(如何通过 cookie 来实现用户确定或者权限的确定呢?)

image.png

  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 来判断是否存在会话,存在则正常响应。
1.4 cookie的主要特点
  1. cookie 存储在客户端
  2. cookie 不可跨域,但是在如果设置了 domain,那么它们是可以在一级域名和二级域名之间共享的。
2.什么是session
2.1 概念

session是由服务端创建,当一个请求发送到服务端时,服务器会检索请求中有没有包含sessionId的标识,如果包含就说明服务端已和客户端创建过session标识,不包含则为客户端创建一个新的session,并生成一个新的sessionId与session对应,然后在响应的时候传给客户端,通常存储在cookie中

image.png

3.cookie和session的区别
  1. session 比 cookie 更加安全,因为它是存在服务端的,cookie 是存在客户端的。
  2. cookie 只支持存储字符串数据,session 可以存储任意数据。
  3. cookie 的有效期可以设置较长时间,session 有效期都比较短。
  4. session 存储空间很大,cookie 有限制。

备注:系统想要实现鉴权,可以单独使用 cookie,也可以单独使用 session,但是建议结合两者使用。

  1. cookie和session的缺点
    • 5.1. 增加请求体积,浪费性能,因为每次请求都会携带 cookie。
    • 5.2. 增加服务端资源消耗,因为每个客户端连接进来都需要生成 session,会占用服务端资源的。
    • 5.3. 容易遭受 CSRF 攻击,即跨站域请求伪造。
4.什么是token
  1. token的组成
    • token其实就是一个字符串,只不过是一个被加密后的字符串。它通常使用uid(唯一标识)、时间戳、签名以及一些其他参数加密而成。我们将token进行解密就可以得到uid这类的信息,然后通过uid来继续下列的鉴权操作
  2. token是如何生成的
    • token 主要是由服务器生成,然后返回给客户端,客户端手动把 token 存下来,比如利用 localstorage 或者直接存到 cookie 当中也行
  3. token的认证流程
    • 4.1. 客户端发起登录请求,比如用户输入用户名和密码后登录。
    • 4.2. 服务端校验用户名和密码后,将用户 id 和一些其它信息进行加密,生成 token。
    • 4.3. 服务端将 token 响应给客户端。
    • 4.4. 客户端收到响应后将 token 存储下来。
    • 4.5. 下一次发送请求后需要将 token 携带上,比如放在请求头中或者其它地方。
    • 4.6. 服务端 token 后校验,校验通过则正常返回数据。

image.png

5. cookie、session、token的区别

image.png