Token,Cookie,Session

无状态

http是无状态的啦,也就是说,http请求方和响应方无法维护状态,都是一次性的,有些场景需要登陆怎么办?就需要维护状态进行标记

Cookie(维持HTTP请求状态的基石)

前端存储的一种方式,相比于localStorage等其他方式,借助Http头部,浏览器能力,可以做到无感知。

  • 存储在客户端的,不可以跨域
  • 过程:
    1. 在提供标记的接口,返回http返回头的Set-Cookie字段,直接种在浏览器中
    2. 浏览器发送请求的时候,会自动把cookie通过http请求头的字段 Cookie,带给接口
  • 前端可以自己创建cookie 如果服务器创建cookie每家HttpOnly,也可以给他加入cookie
  • 调用document.cookie可以创建,修改cookie,和HTTP一样,一次document.cookie只能操作一个cookie

服务端Session(基于Cookie实现的)

  • 过程:
    1. 浏览器登录发送账号密码,服务端查找用户库对用户校验
    2. 服务端把用户登录状态存为Session,生成sessionId
    3. 通过登录接口返回,把sessionId 给到Cookie
    4. 之后浏览器再次请求业务,sessionId随cookie带上
    5. 服务端查sessionId校验 session
    6. 成功后正常业务处理,返回结果
  • sessionId是连接cookie和Session的一道桥梁
  • 存储方式:具体内容自己存储
  • 过期销毁:只要把存储的session进行销毁

二者区别

  1. 安全性:Session是比Cookie安全的,Session存储在服务器,Cookie存储在客户端
  2. 存取值是不同的,Cookie只支持字符串数据,想要其他类型需要转换成字符串,Session传递任意类型
  3. 存储的大小不同,单个Cookie保存的数据不能超过4k这个其实根据浏览器来确定的,Session存储数据的大小远远超过Cookie,但是数据过多会占用服务器的资源

Token(令牌)

  • Access Token:访问接口时所需要的接口凭证
  • 简单token组成:uid(用户唯一身份标识),time(当前时间),sign(签名)
  • 特点:
    1. 服务端无状态化,可拓展性好
    2. 支持移动端设备
    3. 安全
    4. 支持跨程序调用
  • 过程:
    1. 客户端使用用户名和密码进行登录
    2. 服务端收到请求,去验证用户名和密码
    3. 验证成功后,服务端会签发一个token并把这个token发送给客户端
    4. 客户端收到token之后,存储,放到cookie或者localStorage内部
    5. 客户端每次请求需要携带这个token
    6. 服务器收到请求,验证token,验证成功,就返回请求数据
  • 注意:
    • 每次请求都需要携带token,并且把token放到Http的Header内部
    • token的用户认证是一种无状态的认证方式,服务端不用存放token数据。用解析token的时间来换取session的存储空间,减轻服务器压力
    • token完全由应用管理,可以避开同源策略
上一篇:cookie、session、token、jwt


下一篇:虚拟机搭建appRtcDemo的appr.tc服务器