0

0

解析HTML5的存储功能和web SQL的相关操作方法_html5教程技巧

php中文网

php中文网

发布时间:2016-05-16 15:45:55

|

1563人浏览过

|

来源于php中文网

原创

html5 引入了两种机制,类似于 http 的会话 cookies,用于在客户端存储结构化数据以及克服以下缺点。

每个 HTTP 请求中都包含 Cookies,从而导致传输相同的数据减缓我们的 Web 应用程序。

每个 HTTP 请求中都包含 Cookies,从而导致发送未加密的数据到互联网上。

Cookies 只能存储有限的 4KB 数据,不足以存储所需的数据。
这两种存储方式是 session storage 和 local storage,它们将用于处理不同的情况。

几乎所有最新版的浏览器都支持 HTML5 存储,包括 IE 浏览器。

立即学习前端免费学习笔记(深入)”;

会话存储
_会话存储_被设计用于用户执行单一事务的场景,但是同时可以在不同的窗口中执行多个事务。

示例

比如,如果用户在同一网站的两个不同的窗口中购买机票。如果该网站使用 cookie 跟踪用户购买的机票,当用户在窗口中点击页面时,从一个窗口到另一个时当前已经购买的机票会“泄漏”,这可能导致用户购买同一航班的两张机票而没有注意到。

HTML5 引入了 sessionStorage 属性,这个网站可以用来把数据添加到会话存储中,用户仍然可以在打开的持有该会话的窗口中访问同一站点的任意页面,当关闭窗口时,会话也会丢失。

下面的代码将会设置一个会话变量,然后访问该变量:

XML/HTML Code复制内容到剪贴板
  1. nbsp;HTML>  
  2. html>  
  3. body>  
  4.   
  5.   script type="text/javascript">  
  6.     if( sessionStorage.hits ){   
  7.        sessionStorage.hits = Number(sessionStorage.hits) +1;   
  8.     }else{   
  9.        sessionStorage.hits = 1;   
  10.     }   
  11.     document.write("Total Hits :" + sessionStorage.hits );   
  12.   script>  
  13.   p>Refresh the page to increase number of hits.p>  
  14.   p>Close the window and open it again and check the result.p>  
  15.   
  16. body>  
  17. html>  

本地存储
_本地存储_被设计用于跨多个窗口进行存储,并持续处在当前会话上。尤其是,出于性能的原因 Web 应用程序可能希望在客户端存储百万字节的用户数据,比如用户撰写的整个文档或者是用户的邮箱。

Cookies 并不能很好的处理这种情况,因为每个请求都会传输。

示例

HTML5 引入了 localStorage 属性,可以用于访问页面的本地存储区域而没有时间限制,无论何时我们使用这个页面的时候本地存储都是可用的。

下面的代码设置了一个本地存储变量,每次访问这个页面时都可以访问该变量,甚至是下次打开窗口时:

XML/HTML Code复制内容到剪贴板
  1. nbsp;HTML>  
  2. html>  
  3. body>  
  4.   
  5.   script type="text/javascript">  
  6.     if( localStorage.hits ){   
  7.        localStorage.hits = Number(localStorage.hits) +1;   
  8.     }else{   
  9.        localStorage.hits = 1;   
  10.     }   
  11.     document.write("Total Hits :" + localStorage.hits );   
  12.   script>  
  13.   p>Refresh the page to increase number of hits.p>  
  14.   p>Close the window and open it again and check the result.p>  
  15.   
  16. body>  
  17. html>  

便于学习上述概念 - 请进行在线练习。

删除 Web 存储
在本地机器上存储敏感数据可能是危险的,可能会留下安全隐患。

_会话存储数据_在会话终止之后将由浏览器立即删除。

要清除本地存储设置需要调用 localStorage.remove('key');这个 'key' 就是我们想要移除的值对应的键。如果想要清除所有设置,需要调用 localStorage.clear() 方法。

下面的代码会完全清除本地存储:

XML/HTML Code复制内容到剪贴板
  1. nbsp;HTML>  
  2. html>  
  3. body>  
  4.   
  5.   script type="text/javascript">  
  6.     localStorage.clear();   
  7.   
  8.     // Reset number of hits.   
  9.     if( localStorage.hits ){   
  10.        localStorage.hits = Number(localStorage.hits) +1;   
  11.     }else{   
  12.        localStorage.hits = 1;   
  13.     }   
  14.     document.write("Total Hits :" + localStorage.hits );   
  15.   script>  
  16.   p>Refreshing the page would not to increase hit counter.p>  
  17.   p>Close the window and open it again and check the result.p>  
  18.   
  19. body>  
  20. html>  

Web SQL 数据库
Web SQL 数据库 API 并不是 HTML5 规范的一部分,但是它是一个独立的规范,引入了一组使用 SQL 操作客户端数据库的 APIs。
核心方法
下面是规范中定义的三个核心方法。也会涵盖在本教程中:

造好物
造好物

一站式AI造物设计平台

下载

openDatabase:这个方法使用现有的数据库或者新建的数据库创建一个数据库对象。
transaction:这个方法让我们能够控制一个事务,以及基于这种情况执行提交或者回滚。
executeSql:这个方法用于执行实际的 SQL 查询。
开启数据库
如果数据库已经存在,openDatabase 方法负责开启数据库,如果不存在,这个方法会创建它。

使用下面的代码可以创建并开启一个数据库:

JavaScript Code复制内容到剪贴板
  1. var db = openDatabase('mydb''1.0''Test DB', 2 * 1024 * 1024);  

上面的方法接受下列五个参数:

数据库名称
版本号
描述文本
数据库大小
创建回调
最后也是第五个参数,创建回调会在创建数据库后被调用。然而,即使没有这个特性(功能),运行时仍然会创建数据库以及正确的版本。

执行查询
执行查询需要使用 database.transaction() 函数。这个函数需要一个参数,它是一个负责实际执行查询的函数,如下所示:

JavaScript Code复制内容到剪贴板
  1. var db = openDatabase('mydb''1.0''Test DB', 2 * 1024 * 1024);   
  2. db.transaction(function (tx) {     
  3.    tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');   
  4. });  

上面的查询语句会在 'mydb' 数据库中创建一个叫做的 LOGS 的表。

插入操作
为了在表中创建条目,我们在上面的例子中加入简单的 SQL 查询,如下所示:

JavaScript Code复制内容到剪贴板
  1. var db = openDatabase('mydb''1.0''Test DB', 2 * 1024 * 1024);   
  2. db.transaction(function (tx) {   
  3.    tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');   
  4.    tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")');   
  5.    tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")');   
  6. });  

创建条目时还可以传递如下所示的动态值:

JavaScript Code复制内容到剪贴板
  1. var db = openDatabase('mydb''1.0''Test DB', 2 * 1024 * 1024);   
  2. db.transaction(function (tx) {     
  3.   tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');   
  4.   tx.executeSql('INSERT INTO LOGS   
  5.                         (id,log) VALUES (?, ?'), [e_id, e_log];   
  6. });  

这里的 e_id 和 e_log 是外部变量,executeSql 会映射数组参数中的每个条目给 "?"。

读取操作
要读取已经存在的记录,我们可以使用回调来捕获结果,如下所示:

JavaScript Code复制内容到剪贴板
  1. var db = openDatabase('mydb''1.0''Test DB', 2 * 1024 * 1024);   
  2. db.transaction(function (tx) {   
  3.    tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');   
  4.    tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")');   
  5.    tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")');   
  6. });   
  7. db.transaction(function (tx) {   
  8.    tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {   
  9.    var len = results.rows.length, i;   
  10.    msg = "

    Found rows: "

     + len + "";   
  11.    document.querySelector('#status').innerHTML +=  msg;   
  12.    for (i = 0; i 
  13.       alert(results.rows.item(i).log );   
  14.    }   
  15.  }, null);   
  16. });  

最终示例
最后,然我们把这个例子放到如下所示的完整 HTML5 文档中,然后尝试在 Safari 浏览器中运行它:

JavaScript Code复制内容到剪贴板
  1. nbsp;HTML>   
  2.   
  3.   
  4. >   
  5. var db = openDatabase('mydb''1.0''Test DB', 2 * 1024 * 1024);   
  6. var msg;   
  7. db.transaction(function (tx) {   
  8.   tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)');   
  9.   tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")');   
  10.   tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")');   
  11.   msg = '

    Log message created and row inserted.

    '
    ;   
  12.   document.querySelector('#status').innerHTML =  msg;   
  13. });   
  14.   
  15. db.transaction(function (tx) {   
  16.   tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) {   
  17.    var len = results.rows.length, i;   
  18.    msg = "

    Found rows: "

     + len + "";   
  19.    document.querySelector('#status').innerHTML +=  msg;   
  20.    for (i = 0; i 
  21.      msg = "

    "

     + results.rows.item(i).log + "";   
  22.      document.querySelector('#status').innerHTML +=  msg;   
  23.    }   
  24.  }, null);   
  25. });   
  26.   
  27.   
  28.   
  29. "status" name="status">Status Message
      
  30.   
  31.   

在浏览器中这会生成如下所示结果:

复制代码
代码如下:

Log message created and row inserted.

Found rows: 2

foobar

logmsg

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.7万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 9.5万人学习

前端开发(基础+实战项目合集)
前端开发(基础+实战项目合集)

共60课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号