HTML5在客户端存储数据

HTML5在客户端存储数据

在html4及之前的版本中,通常使用cookie存储在用户的客户端,并随浏览器的请求一起发送到服务器的,它有一定的过期时间,过期后自动消失,也制约其发展的因素。

HTML5中增加了两种全新的数据存储方式:Web Storage和Web SQL Database.

一、Web Storage

  • sessionStorage(没有时间限制的数据存储)
  • localStorage(针对一个session(记录一 系列状态)的数据存储)

原先数据存储是由cookie完成的,但是cookie不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得cookie速度很慢而且效率也不高。
在HTML5中,数据不是由每个服务器请求传递的,而是只有在请求时使用数据。它使在不影响网站性能的情况下存储大量数据成为可能
HTML5使用JavaScript来存储和访问数据

1. localStorage方法存储的数据没有时间限制

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8" />
  <title>存储</title>
 </head>
 <body>
  <script>
   localStorage.setItem("ID","12")
   // 登录的时候 进行 用户名保存
   alert( localStorage.getItem("ID"))
   //主页的时候 把保存的用户名 拿出来用
   localStorage.removeItem("ID")
   //关闭页面的时候 把保存的用户名删除
   alert( localStorage.getItem("ID"))
  </script>
 </body>
</html>

2.sessionStorage方法针对一个session进行数据存储。当用户关闭浏览器窗口后,数据会被删除

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>存储</title>
 </head>
 <body>
  <script>
   // 登录的时候 进行 用户名保存
   sessionStorage.setItem("name","jack")
   //主页的时候 把保存的用户名 拿出来用
   sessionStorage.getItem("name")
   //关闭页面的时候 把保存的用户名删除
   sessionStorage.removeItem("name")
  </script>
 </body>
</html>

总结:

相同点:都存在客户端
不同点:
1、存储大小
cookie数据大小不能超过4K
sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多, 可以达到5M或更大
2、有效时间
localStorage存储持久数据,浏览器关闭后数据不丢失,除非主动删除数据
sessionStorage数据在当前浏览器窗口关闭后自动删除
cookie设置的cookie过期时间之前一-直有效,即使窗口或浏览器关闭
3、数据与服务器之间的交互方式
cookie的数据会自动的传递到服务器,服务器端也可以写cookie到客户端
sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存

二、WebSQL数据库

Web SQL定义了三个核心方法

  1. openDatabase: 这个方法使用现有的数据库或者新建的数据库创建一 个数据库对象
  2. transaction:这个方法让我们能够控制一个事务,以及基于这种情况执行提交或者回滚
  3. executeSql: 这个方法用于执行实际的SQL查询

openDatabase ()打开已经存在的数据库或创建一个新的数据库
(第一个参数 数据库名称,第二个参数 版本号,第三个参数 描述文本,第四个参数 数据库大小)
transaction()函数执行查询操作使用

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>webSQL数据库</title>
  <style>
   b{
    color: red;
   }
  </style>
 </head>
 <body>
  <div id="status"></div>
  <script>
   // openDatabase 打开已经存在的数据库或创建一个新的数据库
   // 第一个参数 数据库名称
   // 第二个参数 版本号
   // 第三个参数 描述文本
   // 第四个参数 数据库大小
   // 第五个参数 回调函数function

   var db = openDatabase("mydb","1.0","Test DB",2 * 1024 *1024)
   var e_id = 3;
   var e_log ="CSS4"
   //执行查询操作-插入数据
   db.transaction(function(txt){
    // 在mydb数据库中创建一个名叫 LOGS 的表 表有2个值 ID 唯一性  log 日志
    txt.executeSql("CREATE TABLE IF NOT EXISTS LOGS (id unique,log)")
    //给表里面添加值
    txt.executeSql("INSERT INTO LOGS (id,log) VALUES (1,'HTML')");
    txt.executeSql("INSERT INTO LOGS (id,log) VALUES (2,'css')");
    
    txt.executeSql('INSERT INTO LOGS (id,log) VALUES (?, ?)', [e_id, e_log]);
   })
   //执行查询操作-读取数据+数据渲染
   db.transaction(function(txt){
    txt.executeSql("SELECT * FROM LOGS",[],function(txt,result){
     //获取返回来的行的长度(就是有几行) 初始化一个变量 I
     var len = result.rows.length, i;
     // 输出数据里面有多少条数据
     msg = "<p>查询记录条数:"+len+"</p>";
     // a += b ==> a = a+b
     document.getElementById("status").innerHTML += msg;
     
     //获取每一条数据的LOG值
     // 第一个初始化值  第二个条件判断 第三个自增 自身加1 
     // I=0 表示初始化为0 通过0标示出第一条数据 同理可得 1表示第二条数据 以此类推
     // 只能从0开始不能从1开始 因为数组的下标是从0开始的
     for(i=0;i<len;i++){
      // 把我们从数据库拿到的值进行 循环处理 获取里面每一条数据的log值
      msg="<p><b> "+result.rows.item(i).log+" </b></p>";
      //意义同上只是繁琐一些
      //msg = "<p><b>"+result.rows.item(i).id+":"+result.rows.item(i).log+"</b></p>"
      document.getElementById("status").innerHTML += msg;
     }
    })
   })
   //执行查询操作-删除数据 删除ID为1的记录
   db.transaction(function(txt){
     txt.executeSql("DELETE FROM LOGS WHERE id=1")

    //txt.executeSql("DELETE FROM LOGS")
   })
   //执行查询操作-更新数据 更新ID为2的记录
    db.transaction(function(txt){
     txt.executeSql("UPDATE LOGS SET log=\'css3'\ WHERE id=2");
     //可能会出现插不进去的情况需要先删除所有LOGS中数据再进行操作
    })

  </script>
 </body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_45307387/article/details/107780798