Javascript 简明教程

JavaScript - Storage API

What is Web Storage API?

JavaScript 中的 Web 存储 API 允许我们在用户本地系统或硬盘中存储数据。在 JavaScript 中引入存储 API 之前,cookie 被用来将数据存储在用户的浏览器中。

cookie 的主要问题是,每当浏览器请求数据时,服务器都必须发送数据并将其存储在浏览器中。有时,攻击者还可能攻击和窃取数据。

对于存储 API,我们可以将用户数据存储在浏览器中,这些数据仅限于用户的设备。

JavaScript 包含两个不同的对象,用于将数据存储在本地。

  1. localStorage

  2. sessionStorage

在此,我们解释了本地存储和会话存储。

The Window localStorage Object

localStorage 对象允许您以键值对格式将数据本地存储在用户的浏览器中。

您最多可以在本地存储中存储 5 MB 的数据。

无论您在本地存储中存储什么数据,它都不会过期。但是,您可以使用 removeItem() 方法来移除特定项,或使用 clear() 来从本地存储中移除所有项。

Syntax

我们可以遵循以下语法从浏览器的本地存储中设置和获取项。

localStorage.setItem(key, value); // To set key-value pair
localStorage.getItem(key); // To get data using a key

在上述语法中,setItem() 方法在本地存储中设置该项,而 getItem() 方法用于使用其键从本地存储中获取该项。

Parameters

  1. key − 这可以是任何字符串。

  2. value − 它是字符串格式的值。

Example

在下面的代码中,我们在 setItem() 函数内部将“fruit”设置为键,将“Apple”设置为本地存储中的值。当用户单击该按钮时,我们调用 setItem() 函数。

在 getItem() 函数中,我们从本地存储中获取“fruit”键的值。

用户可以首先单击设置项按钮,然后获取该项以从本地存储中获取键值对。

<html>
<body>
   <button onclick = "setItem()"> Set Item </button>
   <button onclick = "getItem()"> Get Item </button>
   <p id = "demo"> </p>
   <script>
      const output = document.getElementById('demo');
      function setItem() {
         localStorage.setItem("fruit", "Apple");
      }
      function getItem() {
         const fruitName = localStorage.getItem("fruit");
         output.innerHTML = "The name of the fruit is: " + fruitName;
      }
   </script>
</body>
</html>

localStorage 不允许您存储对象、函数等。所以,您可以使用 JSON.stringify() 方法将对象转换成字符串,并将其存储在本地存储中。

Example: Storing the object in the local storage

在下面的代码中,我们创建了动物对象。然后,我们使用 JSON.stringify() 方法将其转换成字符串并将其存储为“animal”对象的的值。

用户可以单击设置项按钮将对象设置到本地存储,并获取该项以从本地存储中获取键值对。

<html>
<body>
   <button onclick = "setItem()"> Set Item </button>
   <button onclick = "getItem()"> Get Item </button>
   <p id = "demo"> </p>
   <script>
      const output = document.getElementById('demo');
      function setItem() {
         const animal = {
            name: "Lion",
            color: "Yellow",
            food: "Non-vegetarian",
         }
         localStorage.setItem("animal", JSON.stringify(animal));
      }

      function getItem() {
         const animal = localStorage.getItem("animal");
         output.innerHTML = "The animal object is: " + animal;
      }
   </script>
</body>
</html>

Example: Removing the items from the local storage

在下面的代码中,当网页加载到浏览器中时,我们在本地存储中设置“name”和“john”键值对。

然后,用户可以单击获取项按钮从本地存储中获取该项。它将向您显示名称。

在单击移除项按钮后,您可以再次单击获取项按钮,它将向您显示 null,因为该项已从本地存储中删除。

<html>
<body>
   <button onclick = "getItem()"> Get Item </button>
   <button onclick = "removeItem()"> Remvoe Item </button>
   <p id = "demo"></p>
   <script>
      const output = document.getElementById('demo');
      localStorage.setItem('name', 'John');
      function getItem() {
         output.innerHTML = "The name of the person is: " +
		 localStorage.getItem('name');
      }
      function removeItem() {
         localStorage.removeItem('name');
         output.innerHTML = 'Name removed from local storage. Now, you can\'t get it.';
      }
   </script>
</body>
</html>

The Window sessionStorage Object

sessionStorage 对象还允许以键值对格式在浏览器中存储数据。

它还允许您存储多达 5 MB 的数据。

当您关闭浏览器的选项卡时,存储在会话存储中的数据将过期。这是会话存储和本地存储之间的主要区别。您还可以使用 removeItem() 或 clear() 方法从会话存储中移除该项,而无需关闭浏览器的选项卡。

注意 – 某些浏览器(如 Chrome 和 Firefox)会在您在关闭浏览器选项卡后重新打开它时维护会话存储数据。如果您关闭浏览器窗口,它肯定会删除会话存储数据。

Syntax

请遵循以下语法,使用会话存储对象设置和获取会话存储中的数据。

sessionStorage.setItem(key, value); // To set key-value pair
sessionStorage.getItem(key); // To get data using a key

setItem() 和 getItem() 方法在使用 localStorage 对象时与 sessionStorage 对象具有相同的结果。

Parameters

  1. key − 它是字符串格式的键。

  2. value − 它是字符串格式的键值。

Example

在以下代码中,我们将“username”用作键,“tutorialspoint”用作值。我们使用 setItem() 方法将键值对存储在 sessionStorage 对象中。

单击设置项目按钮后,您可以单击获取项目按钮以从会话存储中获取键值对。

<html>
<body>
   <button onclick = "setItem()"> Set Item </button>
   <button onclick = "getItem()"> Get Item </button>
   <p id = "output"> </p>
   <script>
      const output = document.getElementById('output');
      function setItem() {
         sessionStorage.setItem("username", "tutorialspoint");
      }
      function getItem() {
         const username = sessionStorage.getItem("username");
         output.innerHTML = "The user name is: " + username;
     }
   </script>
</body>
</html>

不能将文件或图像数据直接存储在本地存储或会话存储中,但可以读取文件数据,将其转换为字符串,并将其存储在会话存储中。

Example

在以下代码中,我们使用 <input> 元素从用户获取图像输入。当用户上传图像时,它将调用 handleImageUpload() 函数。

在 handleImageUpload() 函数中,我们获取上传的图像。之后,我们使用 FileReader 读取图像数据,并将其设置到会话存储中。

在 getImage() 函数中,我们从会话存储中获取图像,并将其数据设置为图像的“src”属性的值。

用户可以先上传图像,再单击“获取图像”按钮,以在网页上显示图像。

<html>
<body>
   <h2> Upload image of size less than 5 MB </h2>
   <input type = "file" id = "image" accept = "image/*" onchange = "handleImageUpload()">
   <div id = "output"> </div> <br>
   <button onclick = "getImage()"> Get Image </button>
   <script>
      // To handle image upload
      function handleImageUpload() {
         const image = document.getElementById('image');
         const output = document.getElementById('output');
         const file = image.files[0];
         // Read Image file
         if (file) {
            const reader = new FileReader();
            reader.onload = function (event) {
               const data = event.target.result;
               // Storing the image data in sessionStorage
               sessionStorage.setItem('image', data);
            };
            reader.readAsDataURL(file);
         }
      }
      // Function to get image
      function getImage() {
         let data = sessionStorage.getItem("image");
         output.innerHTML = `<img src="${data}" alt="Uploaded Image" width="300">`;
      }
   </script>
</body>
</html>

您还可以像使用 localStorage 一样使用 removeItem() 或 clear() 方法以及 sessionStorage 对象。

在这里,我们给出了 cookie、localStorage 和 sessionStorage 对象之间的差异。

Feature

Cookie

Local storage

Session storage

Storage Limit

4 KB per cookie

5 MB

5 MB

Expiry

它有一个失效期。

It never expires.

当您关闭浏览器窗口时,它会被删除。

Accessibility

它可以在客户端和服务器上访问。

它只能由客户端访问。

它只能由客户端访问。

Security

It can be vulnerable.

It is fully secured.

It is fully secured.

Storage Object Properties and Methods

Property/Method

Description

key(n)

从本地存储或会话存储获取第 n 个键的名称。

length

获取本地存储或会话存储中键值对的数量。

getItem(key)

获取与作为参数传递的键相关的值。

setItem(key, value)

在本地存储或会话存储中设置或更新键值对。

removeItem(key)

使用其键从存储中删除键值对。

clear()

从本地存储或会话存储中删除所有键值对。