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!