原文:HTML5 Storage API

Web Storage是HTML5引入的一个非常重要的功能,可以在客户端本地存储数据,类似HTML4的cookie,但可实现功能要比cookie强大的多。

在Web Storage出现之前,远程的Web服务器需要存储客户端和服务器间交互使用的所有相关数据。cookie是一个在服务器和客户端间来回传送文本值的内置机制。服务器可以基于其放在cookie中的数据在不同web页面间跟踪用户的信息。用户每次访问某个域是,cookie数据都会被来回传送。

尽管cookie无处不在,但它还是有一些总所周知的缺点:

1)cookie的大小受限制,cookie大小被限制在4KB,不能接受像文件或邮件那样的大数据。

2)只要有请求涉及cookie,cookie就要在服务器和浏览器之间来回传送(这解释为什么本地文件不能测试cookie)。一方面,这意味着cookie数据在网络上是可见的,不加密的情况下有安全风险;另一方面,无论加载哪个相关url,cookie中的数据都会消耗网络带宽。

Web Storage出现之后,开发者可以将需要跨请求重复访问的数据直接存储在客户端的浏览器中(开发者也可以将数据存储在javascript对象中,对象在页面加载时保存,并且容易获取),还可以在关闭浏览器很久之后再次打开时恢复数据,以减少网络流量。

Web Storage又分为两种: 
sessionStorage 
localStorage 
key和value都必须为字符串,换言之,web Storage的API只能操作字符串。

Web Storage API检查浏览器的支持性

检测window.sessionStorage和window.localStorage是否存在

 

设置和获取数据

sessionStorage.setItem("myFirstKey","myFirstValue");或者sessionStorage.myFirstKey = myFirstValue;或者sessionStorage["myFirstKey"] ="myFirstValue";

获取数据

sessionStorage.getItem("myFirstKey");

删除数据

sessionStorage.removeItem("myFirstKey");

删除存储列表中的所有数据

sessionStorage.clear();

设置和获取的调用不必要出现在同一个网页上,只要网页是同源的(规则、主机和端口)基于相同的键,我们都能够在其他网页中获取设置在sessionStorage。大部分开发者对页面重新加载时丢失脚本数据的问题已经习以为常,但是通过Web Storage API保存的数据在重新加载页面之后数据仍然存在。

当用户关闭窗口或浏览器,sessionStorage数据将会被清除

localStorage 

localStorage 和sessionStorage的区别在于访问它们的名称不同,分别是通过localStorage 和sessionStorage对象来访问它们,两者的行为上的差异主要是数据的保存时长及它们的共享方式

sessionStorage localStorage

数据会保存在存储它的窗口或标签页关闭时

(浏览器刷新时可以存储数据,浏览器关闭时不可以)

数据的生命期比窗口或浏览器的生命期长
数据只在构建它们的窗口或者标签页内可见 数据可被同源的每个窗口或者标签页共享

将数据存储在本地客户端,进而从本地而不是远程获取数据,即可以降低网络流量,又可提升浏览器的响应速度。

一个困扰开发人员的常用问题是,当用户从应用程序的一个页面切换到另外一个页面时如何管理数据。传统的实现方法是有服务器存储数据,当用户在网页间切换时来回传递数据。还有一种做法是应用程序尽可能让用户停留在一个动态更新的网页上。不过用户更喜欢在页面间切换。

演示地址:http://lovermap.sinaapp.com/test/storage.html

JSON对象的存储

虽然HTML5 Web Storage规范允许将任意类型的对象保存为键-值对形式。实际情况是一些浏览器将数据限定为文本字符串类型。现代浏览器原生支持JSON。我们可以通过序列化复杂对象将JSON数据保存到Storage中,以实现复杂数据类型的持久化。

var data;
function loadData(){
data = JSON.parse(sessonStorage['myStorage']);
}
function saveData(){
sessonStorage['myStorage'] = JSON.stringify(data);//对象转变成字符串
}
window.addEventListener("load",loadData,true);
window.addEventListener("unload",loadData,true);

HTML5 Storage API的更多相关文章

  1. 一篇文章图文并茂地带你轻松学会 HTML5 storage

    html5 storage api localStorage 和 sessionStorage 是 html5 新增的用来存储数据的对象,他们让我们可以以键值对的形式存储信息. 为什么要有 stora ...

  2. [转]使用 HTML5 IndexedDB API

    本地数据持久性提高了 Web 应用程序可访问性和移动应用程序响应能力 索引数据库 (IndexedDB) API(作为 HTML5 的一部分)对创建具有丰富本地存储数据的数据密集型的离线 HTML5 ...

  3. web API简介(三):客户端储存之Web Storage API

    概述 前篇:web API简介(二):客户端储存之document.cookie API 客户端储存从某一方面来说和动态网站差不多.动态网站是用服务端来储存数据,而客户端储存是用客户端来储存数据. W ...

  4. 使用HTML5 WebStorage API构建与.NET对应的会话机制

    HTML5的Web Storage API,我们也称为DOMStarage API,用于在Web请求之间持久化数据.在Web Starage API 出现之前,我们都是将客户端和服务端之间的交互数据存 ...

  5. HTML5 程序设计 - 使用HTML5 Canvas API

    请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...

  6. HTML5 Drop API

    转自:http://www.cnblogs.com/fsjohnhuang/p/3961066.html 一.前言    在HTML4的时代,各前端工程师为了实现拖拽功能可说是煞费苦心,初听HTML5 ...

  7. Three.js + HTML5 Audio API 打造3D音乐频谱,Let’s ROCK!

    继续玩味之前写的音乐频谱作品,将原来在Canvas标签上的 作图利用Three.js让它通过WebGL呈现,这样就打造出了一个全立体感的频谱效果了. 项目详情及源码 项目GitHub地址:https: ...

  8. HTML5 File API — 让前端操作文件变的可能

    前言 在 HTML5 File API 出现之前,前端对于文件的操作是非常有局限性的,大多需要配合后端实现.出于安全角度考虑,从本地上传文件时,代码不可能获取文件在用户本地的地址,所以纯前端不可能完成 ...

  9. 开大你的音响,感受HTML5 Audio API带来的视听盛宴

    话说HTML5的炫酷真的是让我爱不释手,即使在这个提到IE就伤心不完的年代.但话又说回来,追求卓越Web创造更美世界这样高的追求什么时候又与IE沾过边儿呢?所以当你在看本文并且我们开始讨论HTML5等 ...

随机推荐

  1. 奔小康赚大钱 hdu 2255

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  2. JAVA网络爬虫WebCollector深度解析——爬虫内核

    WebCollector爬虫官网:https://github.com/CrawlScript/WebCollector 技术讨论群:250108697 怎样将爬虫内核导入自己的项目? 1.进入爬虫官 ...

  3. opencv MAT数据操作

    1.存取单个像素值 最通常的方法就是 img.at<uchar>(i,j) = 255; img.at<Vec3b>(i,j)[0] = 255; 2.用指针扫描一幅图像 对于 ...

  4. android中设置TextView/Button 走马灯效果

    在Android的ApiDemo中,有Button的走马灯效果,但是换作是TextView,还是有一点差异. 定义走马灯(Marquee),主要在Project/res/layout/main.xml ...

  5. Cocos2d-x 3.1.1 lua-tests 开篇

    Cocos2d-x 3.1.1 lua-tests开篇   本篇博客打算从研究Cocos2d-x引擎提供的測试样例来写起,笔者针对Cocos2d-x 3.1.1这个版本号来介绍怎样来学习它给我们提供的 ...

  6. Oracle“记录被另一个用户锁住” 无法更新删除的解决办法

    1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from v$locked_object; 或者用以下命令: select b. ...

  7. RGB转为Lab空间

    虽然若干年前就看过了关于色彩空间的介绍,但是直到今天才自己动手写代码做这件事情.虽然网络上已经有很多现成的例子,但是一则仅仅适用于浮点型的数据,另一方面,在实现上也有一些尚可优化之处. 色彩模型除了最 ...

  8. JavaScript 中的事件类型4(读书笔记思维导图)

    Web 浏览器中可能发生的事件有很多类型.如前所述,不同的事件类型具有不同的信息,而“ DOM3级事件”规定了以下几类事件. UI(User Interface,用户界面)事件:当用户与页面上的元素交 ...

  9. hdu 1024(dp)

    传送门:Max Sum Plus Plus 题意:从n个数中选出m段不相交的连续子段,求这个和最大. 分析:经典dp,dp[i][j][0]表示不取第i个数且前i个数分成j段达到的最优值,dp[i][ ...

  10. DataGirdView 设置单元格居中

    设置标题行居中: dgvShow.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter ...