早期的网页数据存储只能依赖于cookies,但它存在着容量有限且很小,不便于复杂数据的管理等问题,此外,还需将cookies附带在每一次网络请求之中。HTML5的出现,极大地增加了开发人员的开发灵活度:

  • Web Storage(Key-value 相对简单易用)
  • Web SQL Database(用SQL访问本地数据库)
  • Indexed DB(存取JSON数据的数据库)
  • File system(存取文件)
  • Application Cache(缓存网络资源)

Web Storage由两部分组成,sessionStorage和localStorage,sessionStorage用于本地存储一个会话 (session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久 化的本地存储,仅仅是会话级别的存储;localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。其他特性还包括:

  • localStorage

    • 以域名为单位进行数据划分
    • 同域下的所有页面一起共享这些数据
    • 对数据的改动会导致同时共享这些数据的其他页面触发storage事件
  • sessionStorage
    • 以每个“顶级页面(top-level browsing context)”为单位
    • 在所有同域的“子页面”中共享这些数据(对数据的改动会触发storage事件)
    • 为所有同域的以下“顶级页面”拷贝这些数据(通过超链接新打开的页面、通过脚本新打开的页面)

HTML5 新增的Web Storage 有localStorage 和sessionStorage,
以前要在用户端浏览器储存资料,常会使用cookie,现在则多了Web Storage 可以选择。

cookie 和Web Storage 在应用的不同点

  • 可储存的资料量大小不同
    [cookie的容量]

    1. 大约只能存4KB

    [Web Storage的容量]

    1. 依W3C的说明是依用户端决定( http://www.w3.org/TR/webstorage/#disk-space ),每个origin (注1)容量一般是5MB。
    2. 在wiki查到则是每个浏览器不太一样( http://en.wikipedia.org/wiki/Web_Storage ),Google Chrome:2.5MB, Mozilla Firefox、 Opera:5MB,Internet Explorer:10MB
    3. 注1:相同的origin,表示同一个domain(host) 和port。
      Same Origin Policy说明:
      http://www.w3.org/Security/wiki/Same_Origin_Policy
      http://en.wikipedia.org/wiki/Same_origin_policy
  • cookie会随着HTTP header传用给伺服器,所以伺服器可以直接操作cookie。
    Web Storage则无法直接在伺服器端操作,若要在伺服器端读取Web Storage,则须另外传送。

Web Storage 使用说明

  • Web Storage 包含localStorage 和sessionStorage,操作方式基本上是一样的。
    两者不一样的地方,在于:
    储存在localStorage的资料,关闭浏览器依旧会存在。
    储存在sessionStorage的资料,在关闭浏览器后,就不见了。
  • localStorage 使用范例
    localStorage["test1"]='a'; //儲存資料,方法1
    localStorage.test2='b'; //儲存資料,方法2
    localStorage.setItem("test3","c"); //儲存資料,方法3alert(localStorage["test1"]); //讀取資料,方法1
    alert(localStorage.test2); //讀取資料,方法2
    alert(localStorage.getItem("test3")); //讀取資料,方法3localStorage.removeItem("test1"); //刪除key值為test1這筆資料localStorage.clear(); //刪除localStorage裡所有資料
  • sessionStorage使用范例
    sessionStorage["test1"]='a'; //儲存資料,方法1
    sessionStorage.test2='b'; //儲存資料,方法2
    sessionStorage.setItem("test3","c"); //儲存資料,方法3alert(sessionStorage["test1"]); //讀取資料,方法1
    alert(sessionStorage.test2); //讀取資料,方法2
    alert(sessionStorage.getItem("test3")); //讀取資料,方法3sessionStorage.removeItem("test1"); //刪除key值為test1這筆資料sessionStorage.clear(); //刪除localStorage裡所有資料

Web Storage 的属性和方法

  • length:回传有几笔资料。
  • setItem(key,value):设定一笔资料。
  • getItem(key):由指定的key,取得该笔资料,若指定的key 不存在,回传null。
    (若用localStorage["test1"]、localStorage.test1 的方式,遇不存在的key,会回传undefined)。
  • removeItem(key):由指定的key,移除该笔资料。
  • clear():清除所有资料。
  • key(index) :由指定的index(索引),取得key的名称。

Web Storage 的事件(event) (当储存区的资料发生异动时,会触发storage事​​件)

  • key:被改变的key 名称。
  • oldValue:被改变的key 对应的原始资料。
  • newValue:被改变的key 对应的新资料。
  • url:被改变的key 原始网址。
  • storageArea:被改变的Storage 物件。
  • 注意事项:注册storage事件和触发storage事件的动作,须在两个页面
  • 测试范例1:(用iframe 触发父视窗注册的storage 事件)
    注册storage事件页面 (里面再用iframe带入另一个test.html页面)

    <script>
    function MyStorageHandler(e){alert("key=" +e.key);alert("oldValue=" +e.oldValue);alert("newValue=" +e.newValue);alert("url=" +e.url);alert("storageArea=" +e.storageArea);
    }
    window.addEventListener('storage',MyStorageHandler,false);
    </script>
    <iframe src="test.html"></iframe>

    test.html (触发storage事件页面),
    点击此页的按钮,建立一个新的aa=123的值,即会触发storage事件

    <input type="button" value="button" οnclick="sessionStorage.setItem('aa','123');">
  • 测试范例2:(用两个分页开启同一个页面)
    建立一个页面aa.html,内容如下

    <script>function MyStorageHandler(e){alert('test');}window.addEventListener('storage', MyStorageHandler, false);if(localStorage.length > 0){localStorage.clear();}else{localStorage.setItem('aa', '123');}
    </script>

    同时开两个分页,
    都浏览aa.html 这一页(例:http://127.0.0.1/aa.html)
    重新整理第一个分页时,会触发第二个分页的storage事件, 反之,重新整理第二个分页时,会触发第一个分页的storage事件。
    以上是我在Firefox 和chrome 测试时的情况。
    但在IE9 上测试时,却只要一个分页就可以触发storage 事件?
    而且在IE9 上只要调用setItem(),不管值是否有改变,就会触发storage 事件
    ,不知是不是IE9 的bug?

浏览器查目前Web Storage 的值

  • Firefox:使用firebug,F12 -> 主控台(console) -> 输入localStorage 或sessionStorage -> 执行。
    firebug官方说明https://getfirebug.com/wiki/index.php/DOM_Panel#localStorage
  • chrome:"Ctrl+Shift+I"(开发人员工具) -> Resources -> 即可看到Local Storage 和Session Storage 可以选择

原文:http://xyz.cinc.biz/2013/01/html5-web-storage.html

实例:

<input type='button' οnclick='set_item()' value='存值' />
<input type='button' οnclick='get_item()' value='取值' />
<input type='button' οnclick='delete_item()' value='删除' />
<script>
//localStorage 存值永久有效
function set_item()
{var user = {};user.name = 'Gideon Liang';user.age  = 32;user.home = 'USA';localStorage.setItem('userinfo',JSON.stringify(user));
}//localStorage取值
function get_item(){var data = JSON.parse(localStorage.getItem('userinfo'));alert("name:"+data.name+"\r age:"+data.age+"\r home:"+data.home);
}//localStorage删除指定键对应的值
function delete_item(){localStorage.removeItem('userinfo');alert(localStorage.getItem('userinfo'));
}
</script> 

HTML5 Web Storage用法相关推荐

  1. 使用 jQuery Mobile 与 HTML5 开发 Web App (十六) —— HTML5 Web Storage

    绝大多数的软件都需要使用某种具有持久性的方式来存储数据,Web Apps 也不例外,涉及到完整后台的 Web Apps ,可以直接在后台使用 mysql 等数据库来存储数据,但过多的 sql 查询会影 ...

  2. html5 web storage攻击,HTML5安全风险详析之二:Web Storage攻击

    **一.WebStorage简介** HTML5支持WebStorage,开发者可以为应用创建本地存储,存储一些有用的信息.例如LocalStorage可以长期存储,而且存放空间很大,一般是5M,极大 ...

  3. HTML5 Web Storage事件

    Storage事件 在某些复杂情况下,如果多个页面都需要访问本地存储的数据,就需要在存储区域的内容发生改变时,能够通知相关的页面. Web Storage API内建了一套事件通知机制,当存储区域的内 ...

  4. HTML5 Web Storage API

    Web Storage API Web Storage 是以键值对(key-value)的形式存储数据,要存储的数据需要一个名字作为键,然后就可以使用这个键来读取它的值.键是一个字符串.值可以是 Ja ...

  5. HTML5 Web存储(Web Storage)技术以及用法

    使用HTML5可以在本地存储用户的浏览数据.早些时候,本地存储使用的是 cookie.但是Web 存储需要更加的安全与快速,这些数据不会被保存在服务器上,但是这些数据只用于用户请求网站数据上.它也可以 ...

  6. HTML5 基础知识,第 3 部分 HTML5 API 之应用-介绍HTML5 API 的用法和价值,Canvas 提供的创造性,以及Web storage的离线应用

    HTML5 集设计者和开发者于一身,其主要任务就是构建高效的丰富 Internet 应用程序之富网络应用 (Rich Internet Application,简称RIA),尤其是富 UI(User ...

  7. Web Storage中的sessionStorage和localStorage

    html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage. sessionStorage用于本地存储一个会话(session)中的数据,这些数据只 ...

  8. Where to Store your JWTs – Cookies vs HTML5 Web Storage--转

    原文地址:https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage Update 5/12/20 ...

  9. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)...

    1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息. 但是coo ...

最新文章

  1. 40 万年薪招应届生?OPPO 狂揽芯片人才,应届生招聘行情究竟如何?
  2. 简析将shp导入Oracle并利用geoserver将导入的数据发布
  3. php求二维矩阵的最大子矩阵,最大子矩阵-动态规划
  4. 云原生生态周报 Vol. 13 | Forrester 发布企业级容器平台报告
  5. C语言如何获取结构体中指定元素的大小?sizeof ( (X*)0 ) -> Y)(空指针操作)
  6. modelform save
  7. Python3中使用json将字典转为json文件中的乱码问题
  8. BarTender怎样同时打印自动日期和流水号?
  9. Datawhale数据挖掘项目之task1
  10. Chrome屏蔽广告
  11. 蒟蒻的控制台贪吃蛇(新手实验)
  12. 产品策划到底是做什么的?
  13. 挖掘企业数据矿产,袋鼠云数栈(DTinsight)助力企业搭建数据中台
  14. MacBook m1 芯片快速下载 ndk 和环境配置,防止脱发
  15. 加入中视频计划赚钱吗?你还别不信收益确定高
  16. 第一章 企业管理概论
  17. android 金额输入弹窗,金额输入框_小罗的安卓学习记录的技术博客_51CTO博客
  18. Android Java 多线程常见问题
  19. English trip V2-B 6 A Trip to Ireland 爱尔兰之旅 Teacher:Russell
  20. 幼儿园大班下学期工作计划

热门文章

  1. 鱼塘钓鱼(信息学奥赛一本通-T1373)
  2. 计算(信息学奥赛一本通-T1356)
  3. 13 PP配置-生产主数据-BOM相关-定义修正参数
  4. C语言 memcpy函数(增加dst 从第一字节拷贝判断)的内部简单实现方式
  5. android 添加ga_android开发步步为营之70:android接入Google Analytics总结
  6. css 透明度_如何在网页控制透明度
  7. 30天自制操作系统 pdf_30天自制操作系统:第三天:系统引导完成
  8. setattr()、getattr()、hasattr()【设置属性和方法、得到属性、判断是否有属性和方法】
  9. functools.partial()==>预先设置参数,使得之后调用的时候,减少函数的参数
  10. cookie/storage