接口自动化——session、cookie、token的区别

一、考察点

1.1、Session 的理解

数据存储在服务器端,只把关联数据的一个加密串放到cookie中标记

1.2、Token 的理解

浏览器接受服务器的set-cookie指令,并把cookie保存到客户端浏览器上,每个网站保存的cookie只作用于自己的网站

1.3、Cookie 的理解

是用户请求时附带的请求字段,用于验证身份与权限

二、技术点

2.1、session的实现原理

服务器创建session出来后,会把sessionid以cookie的形式回写给客户端浏览器,只要不关闭客户端浏览器,每次访问服务器时,都会携带sessionid,服务器根据客户端携带的sessionid来识别用户身份,然后为与之对应的session(session保存在服务器端)提供服务。

2.2、cookie的实现原理

cookie由服务器生成,发送给客户端浏览器,浏览器以键值对的形式将cookie保存到某个目录下的文本文件中,客户端每次请求网站时都会把该cookie发送给服务器
服务器根据客户端携带的cookie识别用户的身份

2.3、token的实现原理

基于token的身份验证是无状态的,我们不会将用户信息保存到服务器或session中。这样就解决了在服务端存储信息时许多Nosession的问题,也就意味着你的程序可以根据需要去增减机器,而不用担心用户是否处于登录状态。
基于token的身份验证过程如下:

  1. 用户发送数据请求
  2. 程序验证
  3. 程序返回一个签名的token给客户端
  4. 客户端存储token,用于每次发送请求
  5. 服务端验证token并返回数据

token通常在http的请求头中发送给服务器

三、总结答案

cookie session token
存储位置 客户端 服务端 客户端
安全性 较差 较高 相对最高
占用服务器资源 消耗少 访问量大时消耗多 基本不消耗资源
作用 记录用户状态,辨认身份(传话管理,个性化、追踪) 同cookie 减轻数据库查询的压力,提供授权和认证功能
优点 易于使用和实现,不消耗服务器资源,透明性、持久性 信息非常安全都是存储在服务端 无状态,可扩展和解耦,提供授权和认证功能
缺点 安全性差,容易被劫持 服务器压力大,扩展性不强,分布式、夸系统实现困难 占带宽(最小的token也比cookie大),性能差(需要验证两次),无法在服务端注销,很难解决劫持问题
适用范围 在线订货系统,网站个人化和网站跟踪 session更适用于客户端代码与服务端代码运行在同一台服务器上 token更适用于前后端分离的项目(客户端代码与服务端代码运行在不同的服务器上)