Cookie,Session,Token
http无状态协议
cookie
- 服务端产生内容,发送浏览器保存本地,cookie可以被来回传递,主要用于记录用户的会话状态、身份验证、跟踪用户的行为
 - 优点:
- 在浏览器和服务器间来回传递,适用于跟踪用户行为
 - 可以手动设置过期时间,灵活调节存储时间
 
 - 缺点:
- 每次请求都携带cookie数据,增加流量浪费性能
 - 在http中明文传输不够安全,容易被篡改
 - 存储容量小,一般为4KB
 
 - 应用场景:在客户端和服务器之间共享数据 + 长期存储
 
session(会话)
- 开始:浏览器访问服务器
 - 结束:比较模糊
 - 不同网站对与用户的会话都设定了时间(结束会话)以及唯一的ID(session ID)
 - 一般保存在数据库中
 - 服务器把session ID和会话结束时间发送给浏览器(cookie)
 
localStorage(类似sessionStorage)
html5引入,web API
- 允许在浏览器中长期存储键值对数据,不随http请求发送到服务器
 - 优点:
- 存储容量较大,一般为5M
 - 存储的数据在客户端浏览器可以永久保存,不担心丢失
 - 操作方便,API友好,能通过JS直接访问
 
 - 缺点:
- 一网站只能访问自己域下的LS
 - 不支持在不同浏览器间共享数据
 
 - 只在客户端长期存储 + 无需与服务器交互
 
sessionStorage
html5引入
- 数据仅在浏览会话期间有效
 - 只在单个标签页或者窗口之间共享数据,关闭后数据会清除
 - 优点:
- 数据只存储在客户端
 - 刷新页面仍有原来会话数据
 - 每个标签/窗口间数据独立
 
 - 缺点:
- 不适合长期存储
 - 数据不共享,使用场景有限
 
 - 应用场景:只在客户端 + 会话期间暂存
 
token [JWT(JSON Web Token)]
- 用户第一次登陆网页->服务器生成JWT(不保存),保存JWT签名的密文
 - 把JWT发给浏览器(以cookie/storage形式存储)
 - 用户每次发送请求都会把JWT发送给服务器
 - token存储在用户处
 - JWT组成:header.payload.signature
- header:声明用什么算法生成签名
 - payload:特定数据(有效期.etc)
 - signature:header,payload经过base64编码和算法加密生成的签名
 
 - token保存在浏览器中
 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 QingMaxLim-Blog!








