面试官: 翻译翻译什么 TM 叫 Cookie/Session/Token

223 阅读2分钟

Cookie 是保存在客户端用于身份认证的标识数据

认证流程是, 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时 在 header 的 Cookie 字段中带上

Session 是基于 Cookie 实现的,session 存储在服务器端,sessionId 会被存储到客户端的cookie 中

用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session 请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器

浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名

当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息

Token 的认证流程是

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码
  3. 验证成功后,服务端会生成一个 Token , Token 由 头部, 加密实体, 签名 通过 Base64 算法生成, 并把这个 token 发送给客户端
  4. 客户端收到 Token 以后,会把它存储起来,比如放在 Cookie 里或者 localStorage 里
  5. 客户端请求在 header 中带上 Token, 通常是 Authorization字段或者 Cookie 字段
  6. 服务端收到请求, 验证 Token

三者的区别是

  1. Token 有签名, Session Cookies 没有
  2. Cookie 有大小限制, 通常不能超过 4KB, 其他的没限制
  3. Session 保存在服务端, 另外两个保存在客户端
  4. Session 通常用于会话记录, 动机是使服务端有状态, 失效时间短, 另外两个通常用于获取某些资源凭证, 设置较长的失效时间
  5. Token 可以跨域适合做单点登录, Session 和 Cookie 是不可跨域的, 每个 Cookie 都会绑定单一的域名,一级域名和二级域名之间是允许共享使用的(靠的是 domain)。
  6. Cookie 是跟域名绑定的, Session 是跟单次浏览器标签绑定的, Token 是跟用户代理终端