服务端响应客户端请求时,会返回一个cookie,后续客户端的请求携带这个cookie
特点
1.存储在客户端,可随意纂改
2.影响性能,最大为4kb
3.一个浏览器对于一个网站只能存不超过20个Cookie,而浏览器一般只允许存放300个Cookie
4.移动端对Cookie支持不友好
5.一般情况下存储的是纯文本,对象需要序列化之后才可以存储,解析需要反序列化
通过设置正确的domain和path,减少数据传输,节省带宽

cookie需要的存的东西越来越多,但是cookie大小有限制
所以后端返回sessionId,客户端将sessionid存在cookie中
缓存数据库:所有机器根据sessionId去缓存系统获取用户信息和认证
局限性
1.依赖Cookie,但Cookie可被禁用
2.系统不停请求缓存服务器查找信息,内存开销增加
3.存在单点登录失败的可能性
若负责session的机器挂了,整个登录就挂了,但项目中,负责session的机器也是有多台机器的集群进行负载均
衡增加可靠性

SSO

(单点登录)三种类型
Single Sign On在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统
单点登录
1.同一站点下
2.相同的顶级域名
3.不同的顶级城名
相同域名和相同顶级域名下可共享cookie
但是不同域呢?

  • CAS(中央认证服务)原理
  • 流程和Cookie-session模式相同

Json Web Token

最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+哈希
算法压缩成一定长的十六进制字符串,防止恶意三方拼接token请求)
JWTheader(头部)、payload(负载)、signature(签名)这三个部分组成,中间用.来分隔开:
Header.Payload.Signature
jwt:
“eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOiJhliwiaWFOIjoxNTUxOTUxOTk4fQ.2jf3kl_uKW
RkwjOP6uQRJFqMlwSABcgqqcJofFH5XCo”

  • 弊端

1.JWT的退出是假的登录失效,只要之前的token没过期依然可以用
2.安全性依赖密钥
3.加密生成的数据长

  • 优点

1.不依赖Cookie
2.没有单点登录的cookie-sessionId模式好扩展
3.服务器保持无状态性
session和token的对比就是「用不用cookie」和「后端存不存」的对比