JavaScript有三种数据存储方式,分别是:
sessionStorage
cookier
相同点:都保存在浏览器端
不同点:
①传递方式不同
cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。
sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
②数据大小不同
cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。
存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。
sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
③数据有效期不同
sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;
localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;
cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。
④作用域不同
sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;
localStorage 在所有同源窗口中都是共享的;
cookie也是在所有同源窗口中都是共享的。
Web Storage 支持事件通知机制,可以将数据更新的通知发送给监听者。
Web Storage 的 api 接口使用更方便。
接下来我们就分别探究一下三个存储方法:
cookie
一:使用场景:
1:记住密码,下次自动登录。
2:记录用户浏览数据,进行商品(广告)推荐。
二:特点:
1: cookie保存在浏览器端。
2:单个cookie保存的数据不能超过4KB。
3: cookie中的数据是以域名的形式进行区分的。
4:cookie中的数据是有过期事件的,超过事件数据会被浏览器自动删除。
5:cookie中的数据会随着请求被自动发送到服务器端。
三:
由于cookie存储机制有很多缺点,HTML5不再使用它,转而使用改良后的WebStorage存储机制。
(localStorage和sessionStorage)
localStorage
在HTML5中,新加入了一个localStorage特性,这个特性主要用来作为本地存储来使用。
它解决了cookie存储空间不足的问题,每条cookie的存储空间为4K,localStorage一般为5M。
localStorage生命周期是永久,这意味着除非用户在显示在浏览器提供的UI上清除localStorage信息否则这些信息将永久存在。
localStorage的局限
a.在IE8以上的IE版本才支持localStorage这个属性。
b.目前所有的浏览器中都会被localStorage的值类型限定为string类型,
对我们日常比较常见的JSON对象类型需要一个转换。
我们用代码来展示一下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script src="../js/vue.js"></script>
<script>
//判断浏览器是否支持localstorage
if(window.localStorage){
alert('浏览器支持localStorage')
}
//!为取反运算符
if(!window.localStorage){
alert('浏览器不支持localStorage')
}else{
var Storage = window.localStorage
//写入a字段
Storage['a'] = 1;
//写入b字段
Storage.b = 2;
//写入c字段
Storage.setItem('c',3)
console.log(typeof Storage['a']);
console.log(typeof Storage['b']);
console.log(typeof Storage['c']);
}
</script>
</body>
</html>
SessionStorage
SessionStorage的生命周期
SessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了
那么所有通过Session存储的数据也就被清空了。