HTML5中localStorage与sessionStorage使用详解

 1,Web存储介绍

HTML5的Web存储功能是让网页在用户计算机上保存一些信息。Web存储又分为两种:

(1)本地存储,对应 localStorage 对象。用于长期保存网站的数据,并且站内任何页面都可以访问该数据。
(2)会话存储,对应 sessionStorage 对象。用于临时保存针对一个窗口(或标签页)的数据。在访客关闭窗口或者标签页之前,这些数据是存在的,而关闭之后就会被浏览器删除。

2,本地存储与会话存储的异同

(1)本地存储和会话存储的操作代码完全相同,它们的区别仅在于数据的寿命。
(2)本地存储主要用来保存访客将来还能看到的数据。
(3)会话存储则用于保存那些需要从一个页面传递给下一个页面的数据。

3,Web存储容量限制
大多数浏览器都把本地存储限制为 5MB 以下。这个是和网站所在的域联系在一起的。

4,Web存储的使用样例
下面以本地存储(localStorage)为例,会话存储改成 sessionStorage 对象即可。

(1)文本数据的保存和读取

localStorage.setItem("user_name","hangge.com");
 
var userName = localStorage.getItem("user_name");

(2)数值的保存和读取

localStorage.setItem("user_age",100);
 
var userAge = Number(localStorage.getItem("user_age"));

(3)日期的保存和读取

//创建日期对象
var today = new Date();
 
//按照YYY/MM/DD的标准格式把日期转换成文本字符串,然后保存为文本
var todayString = today.getFullYear() + "/" + today.getMonth() + "/" + today.getDate();
localStorage.setItem("session_started", todayString);
 
//取得日期文本,并基于该文本创建新的日期对象
var newToday = new Date(localStorage.getItem("session_started"));
alert(newToday.getFullYear());

(4)自定义对象的保存和读取

对象的保存和读取可以通过JSON编码转换来实现。
JSON.stringify():把任何对象连同其数据转换为文本形似。
JSON.parse():把文本转换回对象。

//自定义一个User对象
function User(n, a, t) {
    this.name = n;
    this.age = a;
    this.telephone = t;
}
 
//创建User对象
var user = new User("hangge", 100, "123456");
//将其保存为方便的JSON格式
sessionStorage.setItem("user", JSON.stringify(user));
 
//跳转页面
//window.location = "hangge.html";
 
//将JSON文本转回原来的对象
var user2 = JSON.parse(sessionStorage.getItem("user"));
alert(user2.name);

(5)检测某个键的值是否为空,可以直接测试是否等于null

if(localStorage.getItem("user_name") == null){
    alert("用户名不存在!");
}

(6)删除数据项

localStorage.removeItem("user_name");

(7)清除所有数据

localStorage.clear();

(8)查找所有的数据项

不知道键名,可以使用 key() 方法从本地或者会话存储中取得所有的数据项。下面样例,点击按钮后就会列出所有本地存储中的数据。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Find All Items</title>
 
    <script>
        function findAllItems() {
          //取得用于保存数据项的<ul>元素
          var itemList = document.getElementById("itemList");
          //清除列表
          itemList.innerHTML = "";
 
          //遍历所有数据项
          for (var i=0; i<localStorage.length; i++) {
            //取得当前位置数据项的键
            var key = localStorage.key(i);
            //取得以该键保存的数据值
            var item = localStorage.getItem(key);
 
            //用以上数据创建一个列表项添加到页面中
            var newItem = document.createElement("li");
            newItem.innerHTML = key + ": " + item;
            itemList.appendChild(newItem);
          }
        }
    </script>
 
<body>
    <button onclick="findAllItems()">导出所有本地存储数据</button>
    <ul id="itemList">
    </ul>
</body>
</html>

5,响应存储变化

Web存储也为我们提供了在不同浏览器窗口间通信的机制。也就是说在本地存储或会话存储发生变化时,其他查看同一页面或者同一站点中其他页面的窗口就会触发 window.onStorage 事件。
这里说的存储变化,指的是向存储中添加新数据项,修改既有数据项,删除数据项或者清除所有数据。而对存储不产生任何影响的操作(用既有键名保存相同的值,或者清除原本就是空的存储空间),不会引发 onStorage 事件。

下面同时打开两个页面,在页面1中修改数据项,页面2会响应 onStorage 事件,并报告结果。

--- page1.html ---

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Page1</title>
  <style>
    fieldset {
      margin-bottom: 15px;
      padding: 10px;
    }
 
    label {
      width: 40px;
      display: inline-block;
      margin: 6px;
    }
 
    input {
      margin-top: 12px;
      width: 200px;
    }
  </style>
  <script>
    function addValue() {
      // 取得两个文本框中的值
      var key = document.getElementById("key").value;
      var item = document.getElementById("item").value;
 
      // 在本地存储中保存数据项
      // (如果同名键已经存在,则用新值替换旧值)
      localStorage.setItem(key, item);
    }
  </script>
 
<body>
  <fieldset>
    <legend>Local Storage</legend>
    <label for="key">Key:</label>
    <input id="key"><br>
    <label for="item">Value:</label>
    <input id="item">
    <br>
    <button onclick="addValue()">Add</button>
  </fieldset>
</body>
</html>

--- page2.html ---

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Page2</title>
  <style>
    #updateMessage {
      font-weight: bold;
    }
  </style>
  <script>
    window.onload = function() {
        alert(1);
      //给window.onStorage事件添加一个处理函数
      window.addEventListener("storage", storageChanged, false);
    };
 
    function storageChanged(e) {
        alert(2);
      var message = document.getElementById("updateMessage");
      message.innerHTML = "Local storage updated.";
      message.innerHTML += "<br>Key: " + e.key;
      message.innerHTML += "<br>Old Value: " + e.oldValue;
      message.innerHTML += "<br>New Value: " + e.newValue;
      message.innerHTML += "<br>URL: " + e.url;
    }
  </script>
<body>
  <div id="updateMessage">No updates yet.</div>
</body>
</html>

 

时间: 2024-07-31 16:39:10

HTML5中localStorage与sessionStorage使用详解的相关文章

HTML5中meta属性的使用详解

meta属性在HTML中占据了很重要的位置.如:针对搜索引擎的SEO,文档的字符编码,设置刷新缓存等.虽然一些网页可能没有使用meta,但是作为正规军,我们还是有必要了解一些meta的属性,并且能够熟练使用它们. 1.声明文档使用的字符编码 <meta charset='utf-8'> 2.声明文档的兼容模式 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 指示IE以目前可用的最

html5中canvas正弦波运动示例详解

一. 需求: 要求:让小球沿着正弦波运动. 小球的构造函数如下: // 圆球的构造函数 function Ball(radius, color) {     if(radius === undefined) { radius = 40; }     if(color === undefined) { color = "#ff0000"; }     this.x = 0;     this.y = 0;     this.radius = radius;     this.rotati

html5视频video与声频audio详解

html5视频video与声频audio详解      在html5中出现了一些新特性: canvas 元素 视频 video 和 声频audio 元素 : 对本地离线存储(localstorage,sessionstorage)的支持 : 新增特殊内容元素:article.footer.header.nav.section : 新增表单控件: calendar.date.time.email.url.search .     今天看看视频和声频:在html5中规定了视频的标准方法:video

HTML5中Localstorage的使用教程

  这篇文章主要介绍了HTML5中Localstorage的使用教程,Localstorage被用于浏览器和系统交互的本地传出,需要的朋友可以参考下 什么是localstorage 前几天在老项目中发现有对cookie的操作觉得很奇怪,咨询下来是要缓存一些信息,以避免在URL上面传递参数,但没有考虑过cookie会带来什么问题: ① cookie大小限制在4k左右,不适合存业务数据 ② cookie每次随HTTP事务一起发送,浪费带宽 我们是做移动项目的,所以这里真实适合使用的技术是locals

Python中的深拷贝和浅拷贝详解

  这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用.可变对象-不可变对象.拷贝等内容,需要的朋友可以参考下 要说清楚Python中的深浅拷贝,需要搞清楚下面一系列概念: 变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝) [变量-对象-引用] 在Python中一切都是对象,比如说:3, 3.14, 'Hello', [1,2,3,4],{'a':1}...... 甚至连type其本身都是对象,type对象 Python中变量与C/C++/Ja

Python中的推导式使用详解

  这篇文章主要介绍了Python中的推导式使用详解,本文分别讲解了列表推导式.字典推导式.集合推导式使用实例,需要的朋友可以参考下 推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,速度快等优点.推导式包括: 1.列表推导式 2.字典推导式 3.集合推导式 嵌套列表推导式 NOTE: 字典和集合推导是最近才加入到Python的(Python 2.7 和Python 3.1以上版). 下面简要介绍下: [列表推导式] 列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到

MySQL中的RAND()函数使用详解

  这篇文章主要介绍了MySQL中的RAND()函数使用详解,是MySQL入门学习中的基础知识,需要的朋友可以参考下 MySQL RAND()函数调用可以在0和1之间产生一个随机数: ? 1 2 3 4 5 6 7 mysql> SELECT RAND( ), RAND( ), RAND( ); +------------------+-----------------+------------------+ | RAND( ) | RAND( ) | RAND( ) | +----------

Node.js编程中客户端Session的使用详解

  这篇文章主要介绍了Node.js编程中客户端Session的使用详解,是Node.js入门学习中的基础知识,需要的朋友可以参考下 静态网站很容易扩展.你只需要全部缓存,不需要考虑从不同服务器组合有状态的内容给用户. 可惜,大多数Web应用使用有状态的内容提供个性化体验.如果你的应用可以登录,就需要记住用户的Session.经典的处理方法是客户端设置包含随机唯一Session标识的Cookie,被标识的Session数据保存到服务端. 扩展有状态服务 当扩展服务的时候,你肯定有三种选择: 不同

Python中的zipfile模块使用详解

  这篇文章主要介绍了Python中的zipfile模块使用详解,zipfile模块是用来操作zip文件,需要的朋友可以参考下 zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面具体介绍一下: class zipfile.ZipFile(file[, mode[, compression[, allowZip64]]]) 创建一个ZipFile对象,表示一个zip文件.参数file表示文件的路径或类文件对象(file-like object);参