local与session本地存储在多标签页中的区别

338 阅读1分钟

总结

  • local存储的数据会长期有效
  • session存储的数据会随着标签页关闭而消失
  • local存储在数据会在多个标签页中共享
  • session存储的数据仅会在当前标签页中生效
  • 打开新标签页时,原页面的session数据会复制给新页面,但从此之后两页面的session数据就不再有关联

验证localStorage的共享特性

  1. 创建两个文件01.html与02.html
  2. 在01.html中写以下代码
<!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>
        <p></p>
        <button>点我+1</button>
        <script>
            const button = document.querySelector("button");
            // 添加点击事件
            button.addEventListener("click", function () {
                let n = localStorage.getItem("n") || 0;
                n++;
                localStorage.setItem("n", n);
                renderN();
            });
            renderN();
            // 渲染n到页面上
            function renderN() {
                let n = localStorage.getItem("n") || 0;
                const p = document.querySelector("p");
                p.innerText = n;
            }
        </script>
    </body>
</html>
  1. 在02.html中写以下代码
<!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>
        <p></p>
        <button>重置n</button>

        <script>
            const button = document.querySelector("button");
            const p = document.querySelector("p");
            p.innerText = localStorage.getItem("n");
            // 点击按钮重置n
            button.addEventListener("click", function () {
                localStorage.setItem("n", 0);
                p.innerText = 0;
            });
        </script>
    </body>
</html>
  1. 打开01与02页面,点击01中的按钮使n的值变大,切换到02页面后点击重置n按钮,再切回到01页面,点击+1按钮时会发现n变为1了,说明02页面对localStorage中n的操作影响到了01页面

验证sessionStorage的独立特性,即不会多标签页贡献数据

  1. 创建03.html文件,并复制01.html的代码,然后将localStorage全部替换为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>Document</title>
    </head>
    <body>
        <p></p>
        <button>点我+1</button>
        <script>
            const button = document.querySelector("button");
            // 添加点击事件
            button.addEventListener("click", function () {
                let n = sessionStorage.getItem("n") || 0;
                n++;
                sessionStorage.setItem("n", n);
                renderN();
            });
            renderN();
            // 渲染n到页面上
            function renderN() {
                let n = sessionStorage.getItem("n") || 0;
                const p = document.querySelector("p");
                p.innerText = n;
            }
        </script>
    </body>
</html>
  1. 点击按钮使n++,然后用浏览器的复制标签页功能再打开一个新的03.html标签页,新标签页中的n会与旧页面相同,但点击新旧页的n++按钮,会发现两边的n都各自变大且不会互相影响,这就是sessionStorage的一个特性