JS 详解 Cookie、 LocalStorage 与 SessionStorage-转载

记录一下这些知识,有时候用到会忘记,对原文做者表达感谢。

附上原文连接:JS 详解 Cookie、 LocalStorage 与 SessionStorage

基本概念

Cookie 是小甜饼的意思。顾名思义,cookie 确实很是小,它的大小限制为4KB左右。它的主要用途有保存登陆信息,好比你登陆某个网站市场能够看到“记住密码”,这一般就是经过在 Cookie 中存入一段辨别用户身份的数据来实现的。html

localStorage

localStorage 是 HTML5 标准中新加入的技术,它并非什么划时代的新东西。早在 IE 6 时代,就有一个叫 userData 的东西用于本地存储,而当时考虑到浏览器兼容性,更通用的方案是使用 Flash。而现在,localStorage 被大多数浏览器所支持,若是你的网站须要支持 IE6+,那以 userData 做为你的 polyfill 的方案是种不错的选择。前端

sessionStorage

sessionStorage 与 localStorage 的接口相似,但保存数据的生命周期与 localStorage 不一样。作事后端开发的同窗应该知道 Session 这个词的意思,直译过来是“会话”。而 sessionStorage 是一个前端的概念,它只是能够将一部分数据在当前会话中保存下来,刷新页面数据依旧存在。但当页面关闭后,sessionStorage 中的数据就会被清空。程序员

 

三者的异同

特性 Cookie localStorage sessionStorage
数据的生命期 通常由服务器生成,可设置失效时间。若是在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清除,不然永久保存 仅在当前会话下有效,关闭页面或浏览器后被清除
存放数据大小 4K左右 通常为5MB
与服务器端通讯 每次都会携带在HTTP头中,若是使用cookie保存过多数据会带来性能问题 仅在客户端(即浏览器)中保存,不参与和服务器的通讯
易用性 须要程序员本身封装,源生的Cookie接口不友好 源生接口能够接受,亦可再次封装来对Object和Array有更好的支持

应用场景

有了对上面这些差异的直观理解,咱们就能够讨论三者的应用场景了。web

由于考虑到每一个 HTTP 请求都会带着 Cookie 的信息,因此 Cookie 固然是能精简就精简啦,比较经常使用的一个应用场景就是判断用户是否登陆。针对登陆过的用户,服务器端会在他登陆时往 Cookie 中插入一段加密过的惟一辨识单一用户的辨识码,下次只要读取这个值就能够判断当前用户是否登陆啦。曾经还使用 Cookie 来保存用户在电商网站的购物车信息,现在有了 localStorage,彷佛在这个方面也能够给 Cookie 放个假了~后端

而另外一方面 localStorage 接替了 Cookie 管理购物车的工做,同时也能胜任其余一些工做。好比HTML5游戏一般会产生一些本地数据,localStorage 也是很是适用的。若是遇到一些内容特别多的表单,为了优化用户体验,咱们可能要把表单页面拆分红多个子页面,而后按步骤引导用户填写。这时候 sessionStorage 的做用就发挥出来了。浏览器

 

安全性的考虑

须要注意的是,不是什么数据都适合放在 Cookie、localStorage 和 sessionStorage 中的。使用它们的时候,须要时刻注意是否有代码存在 XSS 注入的风险。由于只要打开控制台,你就随意修改它们的值,也就是说若是你的网站中有 XSS 的风险,它们就能对你的 localStorage 肆意妄为。因此千万不要用它们存储你系统中的敏感数据。安全

 

localStorage和sessionStorage操做

localStorage和sessionStorage都具备相同的操做方法,例如setItem、getItem和removeItem等服务器

localStorage和sessionStorage的方法

setItem存储value

用途:将value存储到key字段
cookie

sessionStorage.setItem("key", "value");     localStorage.setItem("site", "js8.in");

getItem获取value

用途:获取指定key本地存储的值session

var value = sessionStorage.getItem("key");     var site = localStorage.getItem("site");

removeItem删除key

用途:删除指定key本地存储的值

sessionStorage.removeItem("key");     localStorage.removeItem("site");

clear清除全部的key/value

用途:清除全部的key/value

sessionStorage.clear();     localStorage.clear();

其余操做方法:点操做和[ ]

web Storage不但能够用自身的setItem,getItem等方便存取,也能够像普通对象同样用点(.)操做符,及[]的方式进行数据存储,像以下的代码:

var storage = window.localStorage; storage.key1 = "hello"; storage["key2"] = "world"; console.log(storage.key1); console.log(storage["key2"]);

localStorage和sessionStorage的key和length属性实现遍历

sessionStorage和localStorage提供的key()和length能够方便的实现存储的数据遍历,例以下面的代码:

复制代码
var storage = window.localStorage;
for(var i=0, len=storage.length; i<len;i++){
    var key = storage.key(i);     
    var value = storage.getItem(key);     
    console.log(key + "=" + value); 
}
复制代码
相关文章
相关标签/搜索