JavaScript红宝书18-客户端存储

72 阅读2分钟

随着网页的应用不断发展,客户端存储被提上了日常,最初的解决方案就是网景公司提出的表单Cookie。

Cookie

Cookie最初用于存储会话信息,该规范要求服务器发送一个持有会话信息 Set-Cookie的HTTP头作为响应的一部分,响应头通常长这样

HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Other-header: other-header-value

限制

Cookie一般特定的域绑定,当设置了Cookie,它会和请求一起发送到创建它的同一个域,这个限制保证了信息存储在Cookie中,只能由接收者访问,不能被其他的域访问。

浏览器通常最大容纳Cookie是以下

总计300条Cookie

每条Cookie最大容纳4096字节

每个域最多容纳20条Cookie

每个域最多容纳81920字节的Cookie

Cookie的构成部分

Cookie由以下部分构成

name:唯一的名识别Cookie,区分大小写,Cookie名必须被URL编码

Value:存储在Cookie的在字符串值,必须被URL编码

domain:Cookie有效的域名,所有从资源发送到该域名的都将会包含Cookie信息

path:Cookie发送到服务器指定域名的路径下

Expiration:时间戳指示Cookie应该在何时被删除

Secure flag:指定后,Cookies信息只会被发送到使用了SSL连接

web存储

现代Web Storage是Web应用规范的第二个版本,用两个主要目标:

提供除Cookie外的存储会话数据的方式

提供可持续大量存储会话数据机制

Web Storage 2版本定义了两个对象,localStorage:持久化存储机制,sessionStorage:会话存储机制

Storage类型

Storage类型被设计了键值对存储方式,提供了以下的操作方法

clear():移除所的有值,火狐浏览器不能实现

getItem(name):传入值的名字获取值

key(index):获取指定索引值的名称

removetem(name):移除指定名称的键值对

setItem(name, value):存储键值对

注意:Storage类型只存储字符串类型数据,不是字符串类型的字符串数据会被自动转为字符串,使用时记得转回需要的类型

基本使用

// 存储数据
localStorage.setItem("name", "华为");
          
// 通过属性存储数据
localStorage.slogan = "遥遥领先";
          
// 读取数据
let name = localStorage.getItem("name");
          
// 通过属性读取数据
let slogan = localStorage.slogan;

console.log(name);

console.log(slogan);