在浏览器客户端记录一些信息,有三种常用的Web数据持久化存储的方式,分别是Web SQL、Local Storage、Cookies。

Web SQL

作为html5本地数据库,可通过一套API来操纵客户端的数据库(关系数据库),下面是支持浏览器情况。

鉴于PC浏览器支持情况,我找了淘宝、京东、携程、起点、优酷网站,并没有用Web SQL记录客户端信息。在移动端比较适用,特别是对于Hybrid应用,更是得心应手。

接口:

openDatabase

transaction

executeSql

1.打开连接并创建数据库

var dataBase = openDatabase("student", "1.0", "学生表", 1024 * 1024, function () { });

2.创建数据表

dataBase.transaction( function(tx) {
tx.executeSql(
"create table if not exists stu (id REAL UNIQUE, name TEXT)",
[],
function(tx,result){ alert('创建stu表成功'); },
function(tx, error){
alert('创建stu表失败:' + error.message); });
});

3.添加数据

dataBase.transaction(function (tx) {
tx.executeSql(
"insert into stu (id, name) values(?, ?)",
[1, '徐明祥'],
function () { alert('添加数据成功'); },
function (tx, error) {
alert('添加数据失败: ' + error.message);
});
});

4.查询数据

dataBase.transaction(function (tx) {
tx.executeSql(
"select * from stu", [],
function (tx, result) { //执行成功的回调函数
//在这里对result 做你想要做的事情吧...........
},
function (tx, error) {
alert('查询失败: ' + error.message)
});
});

特点:

1.有事务

2.查询数据,返回数据类型正确

3.被W3C丢弃的规范,但被广泛支持。

Local Storage

HTML5提供了没有时间限制在客户端存储数据的手段,以键值对存取,网站只能访问其自身的数据,浏览器支持如下。

PS:截图来自网上资料

有个比较有趣的东西,我在起点、京东、优酷的localStorage找个共同的变量,就是jw_bl,里面的数据是(我猜不到这个属性是什么简写的):

{"created" : "Sat Nov 14 2015 23:52:10 GMT+0800 (中国标准时间)" , "expiration" : "Sat, 21 Nov 2015 10:51:54 -0500" , "reason" : "0"}

写数据:

localStorage.pagecount=123;

读数据:

localStorage.pagecount;  // return "123"

PS:要注意的是,获取localStorage的值是字符串,不管你赋值的是什么类型。

特点:

1. 获取值是字符串类型

2. 容量有大约5M限制

注意是总数据量,属性个数不限,我试过写到100000条数据(val仅两个字符),是可以写入的。

3. 不会进行网络传输

Cookies

Cookies是最常用的Web数据持久化手段,所有浏览器都支持。Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。单点登录(SSO)是个很经典的使用。

PS:当然也可以在网页设置cookies

Cookie数量和长度的限制

每个domain最多只能有20条(某些浏览器会多一些)cookie,每个cookie长度不能超过4KB,否则会被截掉。

Cookie生命周期

Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。将Cookie的生存周期设置为“0”或负值,就马上清除Cookie。

Cookie安全性问题

如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。或者是可收集这些信息做一些事。

Cookies请求附带

Cookies每次请求会被发送到服务器,占用额外带宽,示例参数如下(截了一个斗鱼网站请求的图)。

PS:cookies参数需要使用抓包工具(类似fiddler)才能看到,Chrome开发者调试工具看不到的。

Cookies的Javascript编程

下面代码来自网上资料:

创建cookies:

function setCookie(c_name,value,expiredays)
{ var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+"="+escape(value)+((expiredays==null)?"":";expires="+exdate.toGMTString()); }

取值cookies:

function getCookie(c_name)
{
if(document.cookie.length>0) { c_start=document.cookie.indexOf(c_name+"=");
if(c_start!=-1) {
c_start=c_start+c_name.length+1;
c_end=document.cookie.indexOf(";",c_start);
if(c_end==-1)
c_end=document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}

删除cookies:

setCookie("acf_nickname", null , -1);

清除所有cookies:

因为cookies值可能存在“;=”字符,所以清除的函数还没一那么简单,要照着自己工程看着写。

总结

Web SQL一般在移动端使用,localStorage PC和移动端都适用,而cookies是所有持久化存储支持最好的。可根据它们本身的特性选择自己需要使用的方式。

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

本文地址 :http://www.cnblogs.com/lovesong/p/4976233.html

Web持久化存储Web SQL、Local Storage、Cookies(常用)的更多相关文章

  1. web页面缓存技术之Local Storage

    业务:检测页面文本框的值是否有改变,有的话存入缓存,并存储到数据库,这样用户异常操作后再用浏览器打开网页,就可避免重新填写数据 数据库表:Test,包含字段:PageName,PageValue BL ...

  2. 线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理

    原文链接地址:http://www.cppblog.com/Tim/archive/2012/07/04/181018.html 本文为线程本地存储TLS系列之分类和原理. 一.TLS简述和分类 我们 ...

  3. 线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理

    本文为线程本地存储TLS系列之分类和原理. 一.TLS简述和分类 我们知道在一个进程中,所有线程是共享同一个地址空间的.所以,如果一个变量是全局的或者是静态的,那么所有线程访问的是同一份,如果某一个线 ...

  4. Ionic2学习笔记(8):Local Storage& SQLite

    作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5557947.html              Ionic2可以有两种方式来存储数据,Local S ...

  5. HTML5本地存储——Web SQL Database与indexedDB

    虽然在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数 ...

  6. HTML5本地存储——Web SQL Database

    在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数据就 ...

  7. [转]HTML5本地存储——Web SQL Database

    在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数据就 ...

  8. Web存储(Web Storage)介绍

    Web存储即在客户端存储数据. 在没有Web Storage之前,是通过cookie来在客户端存储数据的.但是由于 浏览器能存cookie数比较少.如IE8,Firefox,opera每个域可以保存的 ...

  9. HTML5 本地存储Web Storage简单了解

    ​HTML5本地存储规范,定义了两个重要的API :Web Storage  和  本地数据库Web SQL Database. 本地存储Web Storage 实际上是HTML4的cookie存储机 ...

随机推荐

  1. poj2513Colored Sticks(无向图的欧拉回路)

    /* 题意:将两端涂有颜色的木棒连在一起,并且连接处的颜色相同! 思路:将每一个单词看成一个节点,建立节点之间的无向图!判断是否是欧拉回路或者是欧拉路 并查集判通 + 奇度节点个数等于2或者0 */ ...

  2. Netty中的坑(下篇)

    其实这篇应该叫Netty实践,但是为了与前一篇名字保持一致,所以还是用一下坑这个名字吧. Netty是高性能Java NIO网络框架,在很多开源系统里都有她的身影,而在绝大多数互联网公司所实施的服务化 ...

  3. 简明 Git 命令速查表

    本文总结了git常用的命令,以便学习者使用时查阅~   几个专用名词的译名如下 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote ...

  4. js让程序暂停一段时间再执行

    function sleep(d){ for(var t = Date.now();Date.now() - t <= d;); } sleep(5000); //当前方法暂停5秒

  5. WebStorm 9 配置 Live Edit 功能与浏览器实现同步

    1. 打开Chrome浏览器,点击右上角的“自定义及控制”按钮,选择“更多工具”-->”扩展程序”,打开“扩展程序”页面. 其实以上步骤可以简化为:用Chrome打开chrome://exten ...

  6. [Node.js] 基于Socket.IO 的私聊

    原文地址:http://www.moye.me/2015/01/02/node_socket-io/ 引子 最近听到这么一个问题:Socket.IO 怎么实现私聊?换个提法:怎么定位到人(端),或者说 ...

  7. GoodReader跨域访问HT for Web手册

    最近下载了GoodReader App,发现GoodReader中打开的页面不仅支持WebGL,同时还允许跨域访问资源,以前不少HT for Web手册的例子需要Web服务器发布的方式才能访问,否则需 ...

  8. Windows下ELK环境搭建(单机多节点集群部署)

    1.背景 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时 ...

  9. Redis使用总结(1):基础使用

    Redis的安装及启动 安装 Ubuntu sudo apt-get install redis Mac sudo brew install redis Windows 不支持 启动 首先启动Redi ...

  10. Date对象之应用技巧

    new Date(2014,4,15);设置日期为2014年4月15日 var cur=new Date(); var prev=new Date(cur.setDate(cur.getDate()- ...