然后浏览器 Set-Cookie 的会话信息,之后为每个请求添加 Cookie HTTP 头将信息发送回服务器,如下所示:
GET /index.html HTTP/1.1
Cookie: name=value
Other-header: other-header-value
发送回服务器的额外信息可以用于唯一验证客户来自于发送的哪个请求。
完整的 cookie 包括:
名称: 一个唯一确定 cookie 的名称。必须被 URL 编码。
值: 存储在 cookie 中的字符串值。必须被 URL 编码。
域: cookie 对于哪个域是有效的。
路径: 对于指定域中的那个路径,应该向服务器发送 cookie。
失效时间: 表示 cookie 何时应该被删除的时间戳。
安全标志: 指定后,cookie 只有在使用 SSL 连接的时候才发送到服务器。
代码如下:
Set-Cookie:name=value; domain=www.laixiangran.cn; path=/; expires=Mon, 29 Oct 2018 03:53:10 GMT; secure;
基本用法
在 JavaScript 中操作 cookie 有些复杂,这是因为 document.cookie 属性在不同的使用方式中表现出不同的行为。
当用来获取属性值时,document.cookie 返回当前页面可用的所有 cookie 字符串,一系列由分号隔开的键值对,如下所示:
当用来设置值时,document.cookie 属性会设置一个新的 cookie 字符串添加到现有的 cookie 集合中,并不会像普通对象设置属性一样覆盖原 cookie 的值,除非设置的 cookie 的名称已经存在,如下所示:
从上面的代码我们可以看出,我们要读取或者修改或者删除指定 cookie 的值都不是很直观方便,因此我们可以封装一些方法,方便我们对 cookie 的操作:
使用方法:
大小
每个域的 cookie 总数是有限,不同浏览器之间所有不同,IE6 以下是最多 20 个,IE7 以上最多 50 个,Firefox最多 50 个,Opera 最多 30 个,Safari 和 Chrome 不。
cookie 的尺寸也有,大多数浏览器有大约 4096B。
Web Storage
Web Storage 的目的是克服由 cookie 带来的一些,当数据需要被严格控制在客户端上时,无须持续地将数据发回服务器。Web Storage 的两个主要目标是:
提供一种在 cookie 之外存储会话数据的路径。
提供一种存储大量可以跨会话存在的数据的机制。
Web Storage 主要定义了两种对象:sessionStorage 和 localStorage,是 Storage 对象的实例,这两个对象区别如下:
sessionStorage: 存储特定于某个会话的数据,也就是该数据只保持到浏览器关闭。存储数据大小大多数在 2.5M,少数浏览器在 5M 或者不。
localStorage: 数据保存到通过 JavaScript 删除或者是用户清除浏览器缓存。存储数据大小大多数在 5M,少数浏览器在 2.5M 或者不。
Storage 类型有如下方法:
clear(): 删除所有值。
getItem(name): 根据指定的名字 name 获取对应的值。
key(index): 获取 index 位置处的值的名字。
removeItem(name): 删除由 name 指定的键值对。
setItem(name, value): 为指定的 name 设置一个对应的值,值为字符串。
对 sessionStorage 和 localStorage 进行操作都会触发 storage 事件,该事件对象有以下属性:
domain: 发生变化的存储空间的域名。
key: 设置或者删除的键名。
newValue: 如果是设置值,则是新值;如果是删除键,则是null。
oldValue: 键被更改之前的值。
IndexedDB
Indexed Database API,简称为 IndexedDB,是在浏览器中保存结构化数据的一种数据库。其思想是创建一套 API,方便保存和读取 JavaScript 对象,同时还支持查询和搜索。
IndexedDB 设计的操作完全是异步进行的。因此,大多数操作会以请求方式进行。
基本用法
和 Web Storage类似,只能由同源(相同协议、域名和端口)页面操作,因此不能跨域共享信息。
Firefox 大小上限为 50M,移动端的 Firefox 大小上限为 5M,不允许本地文件访问。
Chrome 大小上限为 5M,允许本地文件访问。