localStorage、sessionStorage、cookie的区别

存储类型

  • 他们均只能存储字符串类型的对象(虽然规范中可以存储其他原生类型的对象,但是目前为止没有浏览器对其进行实现)。

生命周期

  • localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。
  • sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。
  • 如果不设置过期时间,那么cookie存储在内存里,如果通过cookie.setMaxAge(num)设置了过期时间,那么浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式;
    cookie.setmaxage设置为0时,会马上在浏览器上删除指定的cookie,
    cookie.setmaxage设置为-1时,代表关闭当前浏览器即失效。

什么情况下可共享(即可访问)?

  • 不同浏览器无法共享localStorage或sessionStorage中的信息。
  • 相同浏览器的不同页面间可以共享相同的 localStorage(页面属于相同域名和端口),但是不同页面或标签页间无法共享sessionStorage的信息。这里需要注意的是,页面及标 签页仅指顶级窗口,如果一个标签页包含多个iframe标签且他们属于同源页面,那么他们之间是可以共享sessionStorage的。
  • cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。
    -同源的判断规则:
   http://www.test.com

https://www.test.com (不同源,因为协议不同)

http://my.test.com(不同源,因为主机名不同)

http://www.test.com:8080(不同源,因为端口不同)

使用示例

localStorage及sessionStorage的使用
  • localStorage和sessionStorage使用时使用相同的API:
localStorage.setItem("key","value");//以“key”为名称存储一个值“value”
localStorage.getItem("key");//获取名称为“key”的值
  • 枚举localStorage的方法:
for(var i=0;i<localStorage.length;i++){
     var name = localStorage.key(i);
     var value = localStorage.getItem(name);
}
  • 删除localStorage中存储信息的方法:
localStorage.removeItem("key");//删除名称为“key”的信息。
localStorage.clear();//清空localStorage中所有信息
  • 通过getItem或直接使用localStorage["key"]获取到的信息均为实际存储的副本。例如:这里是无法对实际存储的值产生作用的,下面的写法不可以:
localStorage.getItem("key").value1="a";
cookie的使用

cookie的使用

存储大小限制

  • localstorage 大小限制大概在5MB左右,但每个浏览器不一样;
  • sessionstorage大小限制大概在5MB左右;
  • cookie数据不能超过4KB,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识;

兼容性考虑

cookie

所有浏览器及其各版本均兼容cookie;

LocalStorage(SessionStorage同)

以下浏览器兼容LocalStorage及LocalStorage:

提供以下存取方法,兼容所有浏览器,并兼顾localstorage大容量存储的优势:

  • 存值
var arrStr = "首页";

//存储,IE6~7 cookie 其他浏览器HTML5本地存储
if (window.localStorage) {
    localStorage.setItem("menuTitle", arrStr);  
} else {
    Cookie.write("menuTitle", arrStr);  
}
  • 取值
var strStoreDate = window.localStorage
? localStorage.getItem("menuTitle"): Cookie.read("menuTitle");  

参考文章

cookie使用要点
cookie的使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容