深入理解浏览器存储--Cookie、WebStorage、Ind

2021-07-08  本文已影响0人  A郑家庆

Cookie

cookie 的本职工作并非本地存储,而是“维持状态”。cookie指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密)。 cookie是服务端生成,客户端进行维护和存储,存储在内存或者磁盘中。通过cookie,可以让服务器知道请求是来源哪个客户端,就可以进行客户端状态的维护,比如登陆后刷新,请求头就会携带登陆时response header中的Set-Cookie,Web服务器接到请求时也能读出cookie的值,根据cookie值的内容就可以判断和恢复一些用户的信息状态。

localStorage和sessionStorage对比

使用方法

localStorage.setItem('name','world')
localStorage.setItem('gender', true)
localStorage.setItem('num', 0)
var name=localStorage.getItem('name')
var gender=localStorage.getItem('gender')
document.getElementById('name').innerHTML=name
document.getElementById('gender').innerHTML=gender

var obj = { name:'Jim' };
var str = JSON.stringify(obj);
localStorage.setItem('obj', str)
let str1 = localStorage.getItem(obj)
let obj1 = JSON.parse(str)

注意:LocalStorage是永久存储,SessionStorage是临时存储,保存的如果是数组或对象需要先用JSON.stringify转成字符串,取的时候需要用JSON.parse转一下,不管新建的值是数字、布尔值,取出来的都是字符串
WebStorage是对Cookie的拓展,它只能用于存储少量的简单数据,当遇到大规模的、结构复杂的数据时,也会出现问题,所以推出终极解决方案---IndexedDB

IndexedDB

随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据存在客户端,这样就可以减少从服务器获取数据,直接从本地获取数据.Cookie大小不超过4kb,WebStorage在2.5mb到10mb之间,而且不提供搜索功能,不能建立自定义的索引,所以需要一种新的解决方案,这就是IndexedDB诞生的背景.
通俗地说,IndexedDB就是浏览器提供的本地数据库,它可以被网页脚本创建和操作. IndexedDB允许存储大量数据提供查找接口,还能建立索引.IndexedDB数据存储在本地磁盘中.

IndexedDB特性

IndexedDB操作步骤

在IndexedDB大部分操作并不是我们常用的调用方法,返回结果的模式,而是请求---响应的模式.

打开数据库

使用IndexedDB的第一步是打开数据库,使用indexedDB.open()方法

let request = window.indexedDB.open(databaseName, version)

这个方法接受两个参数,第一个参数是字符串,表示数据库的名字,如果指定的数据库不存在就会新建数据库.第二个参数是证书表示数据库的版本,如果省略默认当前版本1. indexedDB.open()方法返回一个IDBRequest对象,这个对象通过三种事件error、success、upgradeneeded处理打开数据库的操作结果.

request.onerror = function (e) {
   console.log('数据库打开报错')
}
let db
request.onsuccess = function (e) {
   db = request.result || db = e.target.result
   console.log('数据库打开/新建成功')
}

这时通过request对象的result属性可以拿到数据库对象

let db
request.onupgradeneeded = function (e) {
   db = e.target.result
}

这时通过事件对象的target.result属性拿到数据库实例

db.close()

db同上

window.indexedDB.deleteDatabase(databaseName)

Cookie、WebStorage、IndexedDB区别

从上表可以看到,Cookie已经不建议用于存储.如果没有大量数据存储需求的话,可以使用localStorage和sessionStorage.

总结

上一篇 下一篇

猜你喜欢

热点阅读