JavaScript——localStorage和sessionStorage的使用方法

本文探讨了localStorage和sessionStorage在网页开发中的作用,对比了它们的生命周期、数据类型限制及使用方法,包括存储字符串、对象转换和操作技巧。

首先localStorage和sessionStorage都是用来存储客户端临时信息的对象。说白了就是把用户输入的信息放在本地中,通常用于记住密码这一类需要实现存储数据的功能。通常我们自己写的网页每次刷新后数据就自动消失了,而这两个方法可以让其刷新完毕过后还保留其中用户输入的数据

这里就用到loaclStorage和sessionStorage方法

其两者的特点如下:

1、用来存储临时信息

2、只能存放字符串类型的对象

3、localStorage生命周期是永久

4、sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。

5、不同的浏览器是不能共享localStorage或着sessionStorage中的信息

 下面说一下localStorage()方法

看这个代码:

<!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>localStorage</title>
    <style>
        input{
            width: 150px;
            height: 30px;
            border: black 1px solid;
            outline: none;
            padding-left: 20px;
            box-sizing: border-box;
        }
        button{
            width: 150px;
            height: 30px;
            border: solid 1px #000;
            font-size: 14px;
            display: block;
            margin: 10px 0;

        }
    </style>
</head>
<body>
    <input type="text" name="" placeholder="请输入您的数据" id="">
    <hr>
    <button id="set">存储本地的数据</button>
    <button id="get">获取本地的数据</button>
    <button id="remove">删除本地的数据</button>
    <button id="delete">清空所有数据</button>
    <script>
        var btn_ipt = document.querySelector('input');
        var p = document.querySelector('p')
        var btn_set = document.getElementById('set');
        var btn_get = document.getElementById('get');
        var btn_remove = document.getElementById('remove');
        var btn_del = document.getElementById('delete');
        btn_set.onclick = function () { 
            var val = btn_ipt.value
            window.localStorage.setItem('username',val);
         }
         btn_get.onclick = function(){
            console.log(window.localStorage.getItem('username'))
         }
         btn_remove.onclick = function(){
             window.localStorage.removeItem('username');
         }
         btn_del.onclick = function(){
             window.localStorage.clear();
         }
    </script>
</body>
</html>

存储本地的数据        效果如下 

 

如果刷新浏览器的话,这些数据也不会消失,会存储在本地 

 获取本地的数据  效果如下

 删除本地的数据和清空所有数据 效果如下:

这里注意一下:localStorage数据是永久的,无论是关闭页面还是换个新的页面导入链接他的数据都还在,但是在浏览器不一样的情况下打开是没有数据的

360浏览器:

 

 

 谷歌浏览器:

 下面说一下

sessionStorage

它只是可以将一部分数据在当前会话中保存下来,刷新页面数据依旧存在。但当页面关闭后,sessionStorage 中的数据就会被清空

看这个例子:

<!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>sessionStorage方法</title>
    <style>
        input {
            width: 140px;
            height: 26px;
            background-color: #fff;
            border: 1px solid #ccc;
            margin: 0 0 30px 0;
            font-size: 14px;
        }

        button {
            width: 140px;
            height: 30px;
            background-color: #fff;
            border: 1px solid #ccc;
            cursor: pointer;
            font-size: 14px;
            display: block;
            margin: 10px 0;
        }
    </style>
</head>

<body>
    <input type="text" name="" placeholder="请输入您的数据" id="">
    <hr>
    <button id="set">存储本地的数据</button>
    <button id="get">获取本地的数据</button>
    <button id="remove">删除本地的数据</button>
    <button id="delete">清空所有数据</button>

    <script>
        var btn_ipt = document.querySelector('input');
        var p = document.querySelector('p')
        var btn_set = document.getElementById('set');
        var btn_get = document.getElementById('get');
        var btn_remove = document.getElementById('remove');
        var btn_del = document.getElementById('delete');
        var obj = {
            'name': 'NanChen',
            'age': 86,
            'sex': '男'
        }

        btn_set.onclick = function () { 
            var val = btn_ipt.value
            window.sessionStorage.setItem('username',val);
         }
         btn_get.onclick = function(){
            console.log(window.sessionStorage.getItem('username'))
         }
         btn_remove.onclick = function(){
             window.sessionStorage.removeItem('username');
         }
         btn_del.onclick = function(){
             window.sessionStorage.clear();
         }

 如果这里新建一个页面把链接导入是不会存储数据的,把页面关闭也不会存储之前的信息

 如何用此方法来存储对象?

这是一个对象obj

var obj = {
            'name': 'NanChen',
            'age': 86,
            'sex': '男'
        }

如果直接存储的话会出现下面这个问题 

window.sessionStorage.setItem('username',obj);

 

 如果用上面那种方法存储对象不会得到信息,只会出现Object

解决办法:

var boj1 = JSON.stringify(obj)

        // 转换为字符串

window.sessionStorage.setItem('username',obj1);

 

 如何用此方法获取对象数据?

这样?

console.log(window.sessionStorage.getItem('username'))

这里也是不行的。那这边就要使用JSON.stringify()方法来获取 

JSON.stringify() :用于将 JavaScript 值转换为 JSON 字符串 

正确获取对象数据的方法:

console.log(JSON.parse(window.sessionStorage.getItem('username')));

效果如下: 

 总结

一、window.sessionStorage

1、生命周期为关闭浏览器窗口

2、在同一个窗口(页面)下数据可以共享

3、以键值对的形式存储使用

存储数据:

    sessionStorage.setItem(key, value)

获取数据:

    sessionStorage.getItem(key)

删除数据:

    sessionStorage.removeItem(key)

清空数据:(所有都清除掉)

    sessionStorage.clear()

二、window.localStorage

1、声明周期永久生效,除非手动删除 否则关闭页面也会存在

2、可以多窗口同一浏览器可以共享

3、以键值对的形式存储使用

存储数据:

localStorage.setItem(key, value)

获取数据:

localStorage.getItem(key)

删除数据:

localStorage.removeItem(key)

清空数据:(所有都清除掉)

localStorage.clear()
### 实现 `localStorage` `sessionStorage` 功能 在 JavaScript 中,可以利用对象或其他存储方式来模拟或补充 `localStorage` `sessionStorage` 的功能。以下是具体的实现方法: #### 模拟 `localStorage` 由于 `localStorage` 是持久化的键值对存储,因此可以用一个全局变量或者更复杂的机制(如文件系统 API 或 IndexedDB)来替代它。 ```javascript // 创建一个简单的 localStorage 替代品 const customLocalStorage = (function () { let storage = {}; // 使用对象作为内存中的存储容器 return { setItem(key, value) { storage[key] = String(value); // 将值转换为字符串形式存储 }, getItem(key) { return storage.hasOwnProperty(key) ? storage[key] : null; }, removeItem(key) { if (storage.hasOwnProperty(key)) { delete storage[key]; } }, clear() { storage = {}; }, key(index) { const keys = Object.keys(storage); return index >= 0 && index < keys.length ? keys[index] : null; }, length: function () { return Object.keys(storage).length; } }; })(); ``` 此代码片段定义了一个名为 `customLocalStorage` 的对象,提供了类似于 `localStorage` 的接口[^1]。 --- #### 模拟 `sessionStorage` 对于 `sessionStorage` 来说,它的行为与 `localStorage` 类似,唯一的区别在于它是基于会话的——当浏览器标签页关闭时,数据会被清除。为了模拟这一特性,可以在每次页面加载时初始化一个新的存储空间。 ```javascript // 创建一个简单的 sessionStorage 替代品 const customSessionStorage = (function () { let storage = {}; window.addEventListener('beforeunload', () => { // 页面即将卸载时清空存储 storage = {}; }); return { setItem(key, value) { storage[key] = String(value); }, getItem(key) { return storage.hasOwnProperty(key) ? storage[key] : null; }, removeItem(key) { if (storage.hasOwnProperty(key)) { delete storage[key]; } }, clear() { storage = {}; }, key(index) { const keys = Object.keys(storage); return index >= 0 && index < keys.length ? keys[index] : null; }, length: function () { return Object.keys(storage).length; } }; })(); ``` 这段代码实现了 `sessionStorage` 的核心逻辑,并通过监听 `beforeunload` 事件,在页面关闭前清理掉所有的存储项[^2]。 --- #### 考虑跨域安全性问题 需要注意的是,无论是真实的还是自定义的 `localStorage` `sessionStorage`,它们都受限于同源策略。这意味着只有在同一协议、域名端口号下才能访问这些存储的内容[^3]。此外,敏感信息不应直接存储在此类存储中,而应考虑使用加密技术或者其他安全措施[^4]。 --- #### 完整示例 下面是一个完整的例子,展示如何使用上述两个模块: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Custom Storage Example</title> <script> const customLocalStorage = (() => {/*...*/})(); // 插入上面的 customLocalStorage 定义 const customSessionStorage = (() => {/*...*/})(); // 插入上面的 customSessionStorage 定义 document.addEventListener("DOMContentLoaded", () => { customLocalStorage.setItem("username", "Alice"); console.log(customLocalStorage.getItem("username")); // 输出 Alice customSessionStorage.setItem("tempData", "This will be cleared on tab close."); console.log(customSessionStorage.getItem("tempData")); // 输出 This will be cleared on tab close. setTimeout(() => { customLocalStorage.removeItem("username"); console.log(customLocalStorage.getItem("username")); // 输出 null }, 5000); }); </script> </head> <body> <h1>Custom Storage Demo</h1> <p>Check the browser's developer tools console to see results.</p> </body> </html> ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Southern Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值