JS本地存储详解

一、localStorage与sessionStorage的区别

localStorage与sessionStorage都属于Web Storage的API。两者的区别在于:

1、存储数据的生命周期:localStorage可以永久存储数据,除非手动删除或清空浏览器缓存。而sessionStorage只能在会话期间(同一窗口或标签页)有效,在关闭窗口或标签页后自动丢失。

2、存储数据的作用域:localStorage在同一域名下的所有页面均可访问,而sessionStorage仅限于同一会话期间的页面可访问。

因此,localStorage适合用于持久化存储一些用户配置信息、用户偏好等数据。而sessionStorage则适合用于临时存储会话期间需要用到的数据。


//localStorage示例代码
localStorage.setItem('username', 'Alice');
localStorage.getItem('username'); //返回'Alice'
localStorage.removeItem('username');

//sessionStorage示例代码
sessionStorage.setItem('orderId', '123456');
sessionStorage.getItem('orderId'); //返回'123456'
sessionStorage.clear();

二、indexedDB的使用

indexedDB是一个基于事件的本地数据库API,可以在客户端(浏览器、PWA)中存储和检索大量数据。相比localStorage和sessionStorage而言,indexedDB可以支持更大容量的数据,并且更适合存储结构化数据。

使用indexedDB可以分为以下几个步骤:

1、创建或打开数据库:打开一个数据库需要指定数据库名、版本号和数据库描述。

2、创建对象存储空间:对象存储空间类似于一张表,存储一组有共同字段的对象。

3、添加数据:使用add或put方法将数据添加到指定的对象存储空间。

4、查询数据:使用get、getAll或索引查询等方法进行数据检索。

5、更新数据:使用put方法更新指定的数据。

6、删除数据:使用delete或clear方法删除指定或全部数据。


//创建或打开数据库
const request = indexedDB.open('myDatabase', 1); //第二个参数为数据库的版本号

//创建对象存储空间
request.onupgradeneeded = function(event) {
  const db = event.target.result;
  const store = db.createObjectStore('books', { keyPath: 'isbn' });
};

//添加数据
request.onsuccess = function(event) {
  const db = event.target.result;
  const transaction = db.transaction(['books'], 'readwrite');
  const store = transaction.objectStore('books');
  
  const book = {
    title: 'JavaScript高级程序设计',
    author: 'Nicholas C.Zakas',
    isbn: '978-7-121-20717-6'
  };
  
  const addRequest = store.add(book);
  
  addRequest.onsuccess = function() {
    console.log('保存成功');
  };
};

//查询数据
request.onsuccess = function(event) {
  const db = event.target.result;
  const transaction = db.transaction(['books'], 'readonly');
  const store = transaction.objectStore('books');
  
  const getRequest = store.get('978-7-121-20717-6');
  
  getRequest.onsuccess = function(event) {
    const book = event.target.result;
    console.log(book.title, book.author);
  };
};

//更新数据
request.onsuccess = function(event) {
  const db = event.target.result;
  const transaction = db.transaction(['books'], 'readwrite');
  const store = transaction.objectStore('books');
  
  const updateRequest = store.put({
    title: '新的JavaScript高级程序设计',
    author: 'Nicholas C.Zakas',
    isbn: '978-7-121-20717-6'
  });
  
  updateRequest.onsuccess = function() {
    console.log('更新成功');
  };
};

//删除数据
request.onsuccess = function(event) {
  const db = event.target.result;
  const transaction = db.transaction(['books'], 'readwrite');
  const store = transaction.objectStore('books');
  
  const deleteRequest = store.delete('978-7-121-20717-6');
  
  deleteRequest.onsuccess = function() {
    console.log('删除成功');
  };
};

三、cookie的使用

以前在Web开发中,cookie是常用的本地存储方式。在HTTP请求中,cookie会随着请求头一起发送到服务器端,服务器通过设置响应头Set-Cookie来设置Cookie。

因此,cookie适合用于存储小容量、敏感性不高的数据,如用户登录状态、用户行为记录等。但是,cookie的缺点也比较明显,如容量小(4KB)、必须在服务器端解析等。

使用cookie可以分为以下几个步骤:

1、设置cookie:在响应头中设置Set-Cookie。

2、读取cookie:从请求头中读取Cookie。

3、更新cookie:同设置cookie。


//设置cookie
document.cookie = 'name=Alice';

//读取cookie
const name = document.cookie.split('; ')[0].split('=')[1];

//更新cookie
document.cookie = 'name=Bob';

四、Web Storage的兼容性

虽然localStorage和sessionStorage已经成为常用的本地存储方式,但是还是存在一些浏览器不支持的情况。在低版本的IE浏览器中,Web Storage API可能不被支持或存在兼容性问题。因此,需要在使用之前检查浏览器是否支持Web Storage API。


if(typeof(Storage) !== 'undefined') {
  //支持Web Storage API
} else {
  //不支持Web Storage API
}

五、本地存储的安全性

使用本地存储时,需要注意数据的安全性。因为本地存储的数据存储在用户的本地硬盘中,存在被窃取的可能性。

为了增加数据的安全性,在使用Web Storage时,可以做以下的处理:

1、不存储敏感数据:如密码、银行账户等敏感信息不要存储在本地。

2、加密处理:可以对存储的数据进行加密处理。

3、短期过期:设置短期过期时间,如30分钟或1小时。

4、跨域访问:尽量不要在跨域的情况下使用Web Storage API,避免数据被其他域名下的页面访问到。

六、总结

本文从localStorage与sessionStorage的区别、indexedDB的使用、cookie的使用、Web Storage的兼容性和安全性等方面详细介绍了JavaScript本地存储的相关知识。希望本文可以对读者了解和使用JavaScript本地存储提供帮助。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/240423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:22
下一篇 2024-12-12 12:22

相关推荐

  • JS Proxy(array)用法介绍

    JS Proxy(array)可以说是ES6中非常重要的一个特性,它可以代理一个数组,监听数据变化并进行拦截、处理。在实际开发中,使用Proxy(array)可以方便地实现数据的监…

    编程 2025-04-29
  • 解析js base64并转成unit

    本文将从多个方面详细介绍js中如何解析base64编码并转成unit格式。 一、base64编码解析 在JavaScript中解析base64编码可以使用atob()函数,它会将b…

    编程 2025-04-29
  • Node.js使用Body-Parser处理HTTP POST请求时,特殊字符无法返回的解决方法

    本文将解决Node.js使用Body-Parser处理HTTP POST请求时,特殊字符无法返回的问题。同时,给出一些相关示例代码,以帮助读者更好的理解并处理这个问题。 一、问题解…

    编程 2025-04-29
  • t3.js:一个全能的JavaScript动态文本替换工具

    t3.js是一个非常流行的JavaScript动态文本替换工具,它是一个轻量级库,能够很容易地实现文本内容的递增、递减、替换、切换以及其他各种操作。在本文中,我们将从多个方面探讨t…

    编程 2025-04-28
  • JS图片沿着SVG路径移动实现方法

    本文将为大家详细介绍如何使用JS实现图片沿着SVG路径移动的效果,包括路径制作、路径效果、以及实现代码等内容。 一、路径制作 路径的制作,我们需要使用到SVG,SVG是可缩放矢量图…

    编程 2025-04-27
  • 如何使用JS调用Python脚本

    本文将详细介绍通过JS调用Python脚本的方法,包括使用Node.js、Python shell、child_process等三种方法,以及在Web应用中的应用。 一、使用Nod…

    编程 2025-04-27
  • 如何反混淆美团slider.js

    本文将从多个方面详细阐述如何反混淆美团slider.js。在开始之前,需要明确的是,混淆是一种保护JavaScript代码的方法,其目的是使代码难以理解和修改。因此,在进行反混淆操…

    编程 2025-04-27
  • Python要学JS吗?

    Python和JavaScript都是非常受欢迎的编程语言。然而,你可能会问,既然我已经学了Python,是不是也需要学一下JS呢?在本文中,我们将围绕这个问题进行讨论,并从多个角…

    编程 2025-04-27
  • 解决js ajax post 419问题

    对于使用ajax post请求时出现的419问题,我们需要进行以下几个方面的阐述,包括返回码的含义、可能出现的情况、解决方案等内容。 一、解析419返回码 419返回码表示用户超时…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25

发表回复

登录后才能评论