Cookie
当网页要发http请求时,浏览器会先检查是否有相应的cookie,有则自动添加在request header中的cookie字段中。这些是浏览器自动帮我们做的,而且每一次http请求浏览器都会自动帮我们做。这个特点很重要,因为这关系到“什么样的数据适合存储在cookie中”。
存储在cookie中的数据,每次都会被浏览器自动放在http请求中,如果这些数据并不是每个请求都需要发给服务端的数据,浏览器这设置自动处理无疑增加了网络开销;但如果这些数据是每个请求都需要发给服务端的数据(比如身份认证信息),浏览器这设置自动处理就大大免去了重复添加操作。所以对于那种设置“每次请求都要携带的信息(最典型的就是身份认证信息)”就特别适合放在cookie中,其他类型的数据就不适合了。
客户端设置
最常用的例子就是让 cookie 在根目录下,这样不管是哪个子页面创建的 cookie,所有的页面都可以访问到了。
document.cookie = "username=cfangxu; path=/"
特征:
- 一个域名下存放的cookie的个数是有限制的,不同的浏览器存放的个数不一样,一般为20个。
- 每个cookie存放的内容大小也是有限制的,不同的浏览器存放大小不一样,一般为4KB。
- cookie也可以设置过期的时间,默认是会话结束的时候,当时间到期自动销毁
localStorage(本地存储)
HTML5新方法,不过IE8及以上浏览器都兼容。
特点
- 生命周期:持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。
- 存储的信息在同一域中是共享的。
- 当本页操作(新增、修改、删除)了localStorage的时候,本页面不会触发storage事件,但是别的页面会触发storage事件。
- 大小:据说是5M(跟浏览器厂商有关系)
- 在非IE下的浏览中可以本地打开。IE浏览器要在服务器中打开。
- localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡
- localStorage受同源策略的限制
设置
localStorage.setItem('username','cfangxu');
获取
localStorage.getItem('username')
也可以获取键名
localStorage.key(0) #获取第一个键名
删除
localStorage.remove('username')
也可以一次性清除所有存储
localStorage.clear()
sessionStorage
其实跟localStorage差不多,也是本地存储,会话本地存储
特点:
- 用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。也就是说只要这个浏览器窗口没有关闭,即使刷新页面或进入同源另一页面,数据仍然存在。关闭窗口后,sessionStorage即被销毁,或者在新窗口打开同源的另一个页面,sessionStorage也是没有的。