前言
最近在重温cookie,session和storage方面的东西,在此作一笔记。
为什么要用
- HTTP协议是一种无状态的协议,也就是说一旦数据交换完毕后,该链接就会关闭,也就意味着服务器不能跟踪该会话,不能识别发起HTTP的客户端是谁了。
- 具体表现
- 当页面跳转的时候,网站的登录状态就丢失了,进入一个新页面就要重复登陆。
- 服务端无法识别客户端用户。
详解
cookie
- 本质: 一小段文本信息。
- 用处:
- 存储客户端通行证,客户端每次发起请求都携带这一通行证以便服务端辨认。
- 存储客户端首选项之类的通用数据,不建议存储业务数据。
- 优点
- 兼容性好,基本兼容所有市面上的主流浏览器。
- 缺点
- 存储空间小,一般一条cookie只存储4KB左右的数据。
- 一个域名一般不能有超过20条cookie
- 性能影响,cookie会被放置在HTTP协议的请求头中发送给服务端
- 安全差,cookie存储的数据是可以被访问的
- 使用方法
Cookie c = new Cookie(\"username\",\"peter\");// 新建一个Cookie对象
c.setMaxAge(24*60*60); // 设置过期时间1天,以秒为单位
response.addCookie(c); // 保存cookie到客户端
session
- 是一种抽象概念,即会话,用于记录一个用户在我们网站上的一些行为、一些状态,可以理解为一个上下文,Context。这些用户状态可以利用Cookie直接保存在前端,也可以保存在后台。
storage
- 作为 Web Storage API 的接口,Storage 提供了访问特定域名下的会话存储或本地存储的功能
- 通过window对象操作,以域名(domain)区分
localStorage
- 存储的是永久性的数据
// 存储
localStorage.setItem(\"lastname\", \"Smith\");
// 检索 localStorage.getItem(\"lastname\");
sessionStorage
- 临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。
// 存储
sessionStorage.setItem(\"lastname\", \"Smith\");
// 检索 sessionStorage.getItem(\"lastname\");