每日一学--session、cookie、token

session

  • 服务器为客户端的一次请求开辟的一段内存空间,存储Session对象,内部结构为ConcurrentHashMap
  • 弥补HTTP的无状态特性
  • 判断同一会话:
    • 第一次请求生成SessionId,通过HTTP响应头SetCookie: JSESSIONID=xxx指令要求客户端设置Cookie;
    • 客户端下一次请求携带SessionId,服务器就可判断为同一会话
  • 缺点:
    • 跨域问题,服务器多节点环境问题
  • 服务器在客户端浏览器保存的数据
  • 作用
    • 会话管理:登陆、购物车、游戏得分
    • 个性化:用户偏好、主题或其他设置
    • 追踪:记录分析用户行为
  • 分类:
    • 会话Cookie:未指定过期时间,客户端关闭则消失
    • 永久Cookie:指定的过期时间,客户端关闭不消失,在特定日期(Expires)或特定时间长度(Max-age)外过期
  • HttpOnly:防止攻击者通过程序(JS/Applet)获取用户Cookie,泄漏信息
  • 作用域
    • Domain指定哪些主机可以接受Cookie,包含子域,如Domain=sogou.com,则其子域名wenwen.sogou.com也包含Cookie
    • Path指定路径作用域,包含子路径,如:Path=/pweb,则子路径/pweb/web也可匹配

JWT

  • 即json web token,与session cookies都可用于用户身份认证
  • JWT格式:xxx.yyyy.zzzzz
    • xxx:Header:指定令牌类型(JWT)和签名算法
{
  "alg":"HS256",
  "typ":"JWT"
}
  • yyyy:Payload:有关数据和实体的声明
{
  "sub","12345",
  "name", "Jim",
  "admin", true
}
  • zzzzz:Signature:签证信息,三部分组成
    • header(base64后)
    • payload(base64后)
    • secret
      比如需要HMAC SHA256算法进行签名
HMACSHA256(
    base64UrlEncode(header) + "." + 
    base64UrlEncode(payload) + "." +
    secret)
  • JWT优点
    • 有加密签名,可保证一定安全性
    • 无状态,声明存储在客户端,身份验证可以在本地进行,无须进行服务器通信,降低了资源消耗
    • 支持跨域认证,由于不依赖服务节点,所以可以做到这点
原文地址:https://www.cnblogs.com/wod-Y/p/12871548.html