还有一种叫作HTTP-only 的cookie。HTTP-only 可以在浏览器设置,也可以在服务器设置,但只能
在服务器上读取,这是因为JavaScript 无法取得这种cookie 的值。
因为所有cookie 都会作为请求头部由浏览器发送给服务器,所以在cookie 中保存大量信息可能会影
响特定域浏览器请求的性能。保存的cookie 越大,请求完成的时间就越长。即使浏览器对cookie 大小有
限制,最好还是尽可能只通过cookie 保存必要信息,以避免性能问题。
对cookie 的限制及其特性决定了cookie 并不是存储大量数据的理想方式。因此,其他客户端存储技
术出现了。
Web Storage
Web Storage 最早是网页超文本应用技术工作组(WHATWG,Web Hypertext Application Technical
Working Group)在Web Applications 1.0 规范中提出的。这个规范中的草案最终成为了HTML5 的一部分,
后来又独立成为自己的规范。Web Storage 的目的是解决通过客户端存储不需要频繁发送回服务器的数
据时使用cookie 的问题。
Web Storage 规范最新的版本是第2 版,这一版规范主要有两个目标:
提供在cookie 之外的存储会话数据的途径;
提供跨会话持久化存储大量数据的机制。
Web Storage 的第2 版定义了两个对象:localStorage 和sessionStorage。localStorage 是
永久存储机制,sessionStorage 是跨会话的存储机制。这两种浏览器存储API 提供了在浏览器中不
受页面刷新影响而存储数据的两种方式。2009 年之后所有主要供应商发布的浏览器版本在window 对象
上支持localStorage 和sessionStorage。
Storage 类型
Storage 类型用于保存名/值对数据,直至存储空间上限(由浏览器决定)。Storage 的实例与其他
对象一样,但增加了以下方法。
clear():删除所有值;不在Firefox 中实现。
getItem(name):取得给定name 的值。
key(index):取得给定数值位置的名称。
removeItem(name):删除给定name 的名/值对。
setItem(name, value):设置给定name 的值。
getItem()、removeItem()和setItem()方法可以直接或间接通过Storage 对象调用。因为每
个数据项都作为属性存储在该对象上,所以可以使用点或方括号操作符访问这些属性,通过同样的操作
来设置值,也可以使用delete 操作符删除属性。即便如此,通常还是建议使用方法而非属性来执行这
些操作,以免意外重写某个已存在的对象成员。
通过length 属性可以确定Storage 对象中保存了多少名/值对。我们无法确定对象中所有数据占用
的空间大小,尽管IE8 提供了remainingSpace 属性,用于确定还有多少存储空间(以字节计)可用。