zoukankan      html  css  js  c++  java
  • HTML5 WEB 存储

    HTML5 WEB 存储

       版权声明:未经博主授权,内容严禁转载 ! 


     WEB 存储系统

      - 互联网最初的设想是作为信息展示的一种方式,信息处理是后来才逐渐出现的。

      - 但是 WEB 的本质没有改变,数据依然是在服务器上完成的,在客户端显示。

      - 对任何程序来讲,实现数据存储是必备的功能之一,并且在需要的视乎提供数据。

      - Cookie 曾经是用来存储少量的信息,但是受限于性质,智能存储简短的字符串。

      * 在 HTML5 中提供了 WEB 存储的 API ,允许在硬盘上存储数据(持久化)。

      * API 可以分为两部分:

        - 信息必须且只在会话过程中使用 - sessionStorage

        - 信息长期保存且有用户决定时长 - localStorage

     sessionSrorage

      sessionStorage API 像是 cookie 的替代,会在会话期间保持数据可用。

      cookie 使用浏览器作为引用,而 sessionStorage 使用单个窗口作为引用。

      这就意味着,窗口关闭后,sessionStorage 就不能再是用了。

     创建数据

      sessionStorage 和 localStorage 都将数据存储为项,采用键值对的格式。

    语法

      - setItem(key,value):用键值对创建项目,主键存在则更新值。

      - getItem(key):根据主键获取对应的值。

      - sessionStorage.setItem('uname','wjw');

      - var uname = sessionStorage.getItem('uname');

    案例代码

    <input type="text" id="uname" name="" value="" required>
    <button type="button" onclick="saveuname()" name="button">save</button>
    
    <script type="text/javascript">
      function saveuname() {
        var uname = document.getElementById("uname").value;
        sessionStorage.setItem("uname",uname);
      }
    </script>

      

    读取数据

       API 提供了更多的方法和属性操纵项,使代码变得有用。

    属性

      - length:返回应用程序在储存空间中积累的项的数量。

    方法

      - key(index):获取指定索引对应的项的主键。

    案例

      - var len = sessionStorage.length;

      - for(var i=0;i<len;i++){

        - var key = sessionStorage.key(i);

        - console.log(sessionStorage.getItem(key));

      - }

    案例代码

    <p>
    <h2 id="msg"></h2>
    </p>
    <p>
      <input type="text" id="key" required>
      <input type="text" id="value" required><br>
      <button type="button" onclick="save()" name="button">save</button>
      <button type="button" onclick="read()" name="button">read</button>
    </p>
    <script type="text/javascript">
      function save() {
        var key = document.getElementById("key").value;
        var value = document.getElementById("value").value;
        sessionStorage.setItem(key,value);
      }
    
      function read() {
        var key =document.getElementById("key").value;
        var msg= document.getElementById("msg");
        msg.innerHTML = sessionStorage.getItem(key);
      }
    </script>

      

    删除数据

     API 提供了两种方式删除项。

      - removeItem(key):根据主键删除指定项。

      - clear():清空整个存储空间,删除所有项。

      - sessionStorage.removeItem('uname');

      - sessionStorage.clear();

      - console.log(sessionStorage.length);

    案例代码

    <div>
    <h2 id="msg"></h2>
    </div>
    <p>
      <input type="text" id="key" required>
      <input type="text" id="value" required><br>
      <button type="button" onclick="saveStorage()" name="button">save</button>
      <button type="button" onclick="readStorage()" name="button">read</button>
      <button type="button" onclick="removeStorage()" name="button">remove</button>
      <button type="button" onclick="clearStorage()" name="button">clear</button>
    </p>
    <script type="text/javascript">
    
      function saveStorage() {
        var key = document.getElementById("key").value;
        var value = document.getElementById("value").value;
        sessionStorage.setItem(key,value);
      }
    
      function readStorage() {
        var key =document.getElementById("key").value;
        var msg= document.getElementById("msg");
        msg.innerHTML = sessionStorage.getItem(key);
      }
    
      function removeStorage() {
        var key =document.getElementById("key").value;
        sessionStorage.removeItem(key);
      }
    
      function clearStorage() {
        sessionStorage.clear();
      }
    
    </script>

      

    练习

       - 创建登录界面,使用 sessionStorage 存储用户名。

       - 在其他界面读取用户信息

     login.html 文件

    <!DOCTYPE html>
    <html lang="zh-cn">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1">
        <meta http-equiv="x-ua-compatible" content="ie=Edge,chrome=1">
        <title>login</title>
        <style>
            .form-container {
                border: 1px solid #999999;
                margin: 0 auto;
                width: 50%;
                text-align: center;
            }
        </style>
    </head>
    <body>
    
    <div class="form-container">
        <form action="welcome.html" onsubmit="return check()">
            <h2>用户登录</h2>
            <p>
                <label for="username">姓名</label>
                <input type="text" id="username" required>
            </p>
            <p>
                <label for="password">密码</label>
                <input type="password" id="password" required>
            </p>
            <p>
                <button type="submit">登录</button>
                <button type="reset">重置</button>
            </p>
        </form>
        <script>
            function check() {
                var username = document.getElementById("username").value;
                var password = document.getElementById("password").value;
    
                if(!sessionStorage.getItem(username)){
                    sessionStorage.setItem(username, password);
                    alert("注册成功!");
                    return false;
                }
    
                if(sessionStorage.getItem(username)===password){
                    alert("登录成功!");
                    sessionStorage.setItem("currentuser",username);
                    return true;
                }else{
                    alert("登录失败!");
                    return false;
                }
            }
        </script>
    </div>
    
    </body>
    </html>

    welcome.html 文件

    <!DOCTYPE html>
    <html lang="zh-cn">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1">
        <meta http-equiv="x-ua-compatible" content="ie=Edge,chrome=1">
        <title>welcome</title>
    </head>
    <body>
        <h2 id="username"></h2>
        <script>
            var username = document.getElementById("username");
            username.innerHTML = "欢迎你," + sessionStorage.getItem("currentuser");
        </script>
    </body>
    </html>

     localStorage

      在窗口会话期间临时存储数据,某些情况下可用,但是如果想摸你桌面应用,临时的数据存储系统就不够用了。

      为了解决这个问题,API 提供了另一个系统,为每个来源保留了一个存储空间,并保存信息持久可用 - localStorage。

      利用 localStorage,可以保存大量数据,并有用户决定信息是否保留。

      localStorage 和 sessionStorage 拥有相同的接口,方法属性一致。

       - localStorage 拓展了 cookie 的 4K 限制。

      - localStorage 会可以将第一次请求的数据直接存储到本地,这相当于一个 5M 大小的针对于前端页面的数据库,相比于 cookie 可以节约带宽,但是这个却是只要在高版本浏览器中才支持的。

     localStorage 的局限性

      浏览器的大小不统一,并且在 IE8 以上版本才支持 localStorage 这个属性。

      目前所有的浏览器中都会把 localStorage 的值类型限定为 string 类型,这个在对我们目前比较常见的 JSON 对象类型需要一些转换。

      localStorage 在浏览器的隐私模式下面是不可读取的。

      localStorage 本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡。

      localStorage 不能被爬虫抓取到。

    localStorage 的浏览器支持判断

      if(!window.localStorage){

        console.log("浏览器不支持localStorage");

      }else{

        console.log("浏览器支持localStorage");

      }

    <script type="text/javascript">
      if(!window.localStorage){
        console.log("浏览器不支持localStorage");
      }else{
        console.log("浏览器支持localStorage");
      }
    </script>

      

    localStorage 写入

      var storage = window.localStorage;

      // 写入 a 字段

      storage["a"]=1;

      // 写入 b 字段

      storage.b=1;

      // 写入 c 字段

      storage.serItem("c",3);

      console.log(typeof storage["a"]);

      console.log(typeof storage["b"]);

      console.log(typeof storage["c"]);

    案例代码

    <script type="text/javascript">
      if(!window.localStorage){
        console.log("浏览器不支持localStorage");
      }else{
        console.log("浏览器支持localStorage");
           localStorage["a"] = "apple";
           localStorage.b="banana";
           localStorage.setItem("c",3);
      }
    </script>

      

    localStorage 存储 JSON 数据

      var storage = window.localStorage;

      var data = {

        title : "html" ,

        author : "w3c" ,

        price : 10.99

      };

      var d = JSON.stringify(data);

      storage.setItem("data",d);

      console.log(storage.data);

     案例代码

    <script type="text/javascript">
    
      var storage = window.localStorage;
      var book = {
        title:"html",
        author:"w3c",
        price:10.99,
      };
    
      console.log(typeof book);  // 打印 book 类型
      var str = JSON.stringify(book); // 转化成字符串
      console.log(typeof str); // 打印 str 类型
      console.log(str);  // 输出字符串
    
      storage.setItem("book",str);
    
    </script>

      

     localStorage 读取 JSON 数据

      var json = storage.getItem("data");

      var jsonObj = JSON.parse(json);

      console.log(typeof jsonObj);

    案例代码

    <script type="text/javascript">
    
      var storage = window.localStorage;
      var book = {
        title:"html",
        author:"w3c",
        price:10.99,
      };
    
      console.log(typeof book);  // 打印 book 类型
      var str = JSON.stringify(book); // 转化成字符串
      console.log(typeof str); // 打印 str 类型
      console.log(str);  // 输出字符串
    
      storage.setItem("book",str);
    
      var str1 = storage.getItem("book");
      var book1 = JSON.parse(str1);
    
      document.writeln("标题:"+book1.title);
      document.writeln("<br/>");
      document.writeln("作者:"+book1.author);
      document.writeln("<br/>");
      document.writeln("价格:"+book1.price);
      document.writeln("<br/>");
    
    </script>

      

  • 相关阅读:
    WorkerMan源码分析(resetStd方法,PHP中STDIN, STDOUT, STDERR的重定向)
    linux:nohup 不生成 nohup.out的方法
    PHP系统编程--PHP进程信号处理(转)
    shell脚本实例总结
    saltstack 迭代项目到客户端并结合jenkins自动发布多台服务器
    自动化运维工具 SaltStack 搭建
    coding利用Webhook实现Push代码后的jenkins自动构建
    基于jquery地图特效全国网点查看代码
    基于jquery判断浏览器版本过低代码
    EntityFramework Model有外键时,Json提示循环引用 解决方法
  • 原文地址:https://www.cnblogs.com/wjw1014/p/8967098.html
Copyright © 2011-2022 走看看