本地存储-localStroage/sessionStorage存储

客户端存储

l  WEB存储

web存储最初作为html5的一部分被定义成API形式,但是后来被剥离出来作为独立的一份标准。该标准目前还在草案阶段,但其中一部分内容已经被包括IE8在内的所有主流浏览器实现了。Web存储标准所描述的API包含localStorage对象和sessionStorage对象,这两个对象实际上是持久化关联数组,是名值对的映射表。名值都是字符串

l  cookie

是一种早期的客户端存储机制,起初是针对服务器端脚本使用的。尽管在客户端提供了非常繁琐的js api来操作cookie,但它们难用至极,而且只适合存储少量文本数据。不仅如此,任何以cookie形式存储的数据,不论服务器端是否需要,每一次http请求都会把这些数据传输到服务器端。cookie目前仍然被客户端程序员大量使用的一个重要原因是:所有新旧浏览器都支持它,但是,随着web storage的普及,cookie终将会回归到最初的形态:作为一种被服务端脚本使用的客户端存储机制。

l  IE User Data

IE5及之后的IE浏览器中实现了它专属的客户端存储机制-----“userData”。userData可以实现一定量的字符串数据存储,对于IE8以前的IE浏览器中,可以将其用做是web存储的替代方案。

l  离线Web应用

HTML5标准定义了一级“离线web应用”API,用以缓存Web页面以及相关资源。它实现的是将web应用整体存储在客户端,而不仅仅是存储数据。它能够让web应用“安装”在客户端,这样一来,哪怕网络不可用的时候web应用依然是可以使用。

l  文件系统API

之前介绍过现在主流浏览器都支持一个文件对象,用以将选择的文件通过XMLHttpRequest上传到服务端。与之相关的规范定义了一级API,用于操作一个私有的本地文件系统。在该文件系统中可以进行对文件的读写操作。这些内容正在紧锣密鼓标准化当中,随着这些api被广泛地实现和支持,web应用可以使用类似基于文件的存储机制。

localStorage和sessionStorage

这两个属性代表同一个Storage对象即一个持久化关联数组,数组使用字符串来索引,存储的值也都是字符串形式的。Storage对象在使用上和一般的javascript对象没什么区别:设置对象的属性为字符串值,随后浏览器会将该值存储起来。

localStorage和sessionStorage两者的区别在于存储的有效期和作用域不同:数据可以存储多长时间以及谁拥有数据的访问权。

通过localStorage存储的数据是永久性的,除非web应用刻意删除存储的数据,或者用户通过设置浏览器配置来删除,否则数据将一直保留在用户的电脑上,永不过期。localStorage的作用域是限定在文档源级别的。文档源是通过协议、主机名端口三者来确定的。同源的文档共享同样的localStorage数据。它们可以互相读取对方的数据,甚至可以覆盖对方的数据(即使它们运行的脚本是来自同一台第三方服务器也不行)。注意:localStorage的作用域也受浏览器供应商的限制。如果使用firefox访问站点,那么下次用另一个浏览器再次访问的时候,那么本次是无法获取上次存储的数据。

sessionStorage存储的数据,一旦窗口或者标签页被永久关闭了,那么所有通过sessionStorage存储的数据也都被删除了。(当然要浏览的是,现代浏览器已经具备了重新打开最近关闭的标签页随后恢复上一次浏览的会话功能,因此,这些标签页以及与之相关的sessionStorage的有效期可能会更加长些)。它的作用域也是限定在窗口中,如果同源的文档渲染在不同的浏览标签页中,那么它们互相之间拥有的是各自的sessionStorage数据,无法共享;一个标签页中的脚本是无法读取或覆盖另一个标签页脚本写入的数据。哪怕这两个标签渲染的是同一个页面,运行的是同一个脚本。

存储API

通常是用做javascript对象使用:通过设置属性来存储字符串值,查询该属性来读取值。除此之外,这两个对象还提供了更加正式的API。

setItem(“名”,”值”); //设置

getItem(“名”); //读取存储

removeItem(“名”); //删除对应的数据 (在非IE8还可用delete操作符来删除数据)

clear(); //清除所有存储的数据

length属性及key()方法,传入0~length-1的数字,可以枚举所有存储数据的名字   如:

for(vari=0;i<localStorage.length;i++){

var name = localStorage.key(i);

var value = localStorage.getItem(name);

}

var memory =window.localStorage || (window.UserDataStorage && new UserDataStorage()) || new cookieStroage();

var userName =memory.getIem(“uername”);

存储事件storage

无论什么时候存储在localStorage或者sessionStorage的数据发生改变,浏览器都会在其他对该数据可见的窗口对象上触发存储事件(但是,在对数据进行改变的窗口对象上是不会触发的)如果浏览器有两个标签页面都打开来自同源的页面,其中一个页面在localStorage上存储了数据,那么另外一个标签页就会接收到一个存储事件。sessionStorage的作用域是限制在顶层窗口的,因此对sessionStorage的改变只有当有相牵连的窗口的时候才会触发存储事件。还要注意,只有当存储数据真正发生改变的时候才会触发存储事件。像给已经存在的存储项设置一个一模一样的值,抑或是删除一个本来就不存在的存储项都是不会触发存储事件的。

为了存储事件注册处理程序可以通过addEventListener()方法或attachEvent()方法。在绝大多数浏览器中,还可以使用window对象设置onstorage属性的方式,不Firefox不支持。

与存储事件相关的事件对象有5个非常重要的属性(遗憾的是,IE8不支持它!!!)

l  key:被设置或者移除的项的名字或键名。如果调用的是clear()函数,那么该属性值为null

l  newValue:保存该项的新值;或者调用removeItem()时,该属性值为null。

l  oldValue:改变或者删除该项,保存该项原先的值;当插入一个新项的时候,该属性值为null。

l  storageArea:这个属性值就好比是目标Window对象上的localStroage属性或是sessionStorage属性

l  url:触发该存储变化脚本所在的文档的URL

注意:localStroage和存储事件是采用广播机制的,浏览器会对目前正在访问的同样的站点的所有窗口发送消息

时间: 2024-11-06 03:35:10

本地存储-localStroage/sessionStorage存储的相关文章

【转】本地存储-localStroage/sessionStorage存储

原文地址:[js学习笔记-103]----本地存储-localStroage/sessionStorage存储 客户端存储 l  WEB存储 web存储最初作为html5的一部分被定义成API形式,但是后来被剥离出来作为独立的一份标准.该标准目前还在草案阶段,但其中一部分内容已经被包括IE8在内的所有主流浏览器实现了.Web存储标准所描述的API包含localStorage对象和sessionStorage对象,这两个对象实际上是持久化关联数组,是名值对的映射表.名值都是字符串. l  cook

Web存储机制—sessionStorage,localStorage使用方法

Web存储机制,在这里主要聊有关于Web Storage API提供的存储机制,通过该机制,浏览器可以安全地存储键值对,比使用cookie更加直观.接下来简单的了解如何使用这方面的技术. 基本概念 Web Storage 包含两种机制: sessionStorage为每一个给定的源维持一个独立的存储区域,该区域在页面会话期间可用(即只要浏览器处于打开状态,包括页面重新加载和恢复) localStorage同样的功能,但是在浏览器关闭,然后重新打开后数据仍然存在 这两种机制是通过Window.se

存储和加载本地文件(内部存储设备)

Android设备上的所有应用都有一个放置在沙盘中的文件目录,将文件保存到沙盒中可以阻止其他应用的访问. 沙盒目录的全路径为:/data/data/<包名>  用File Explorer查看: 如上图可见,每个应用都在/data/data下有一个以此应用包名命名的文件目录. 而本文就是介绍将文件保存在/data/data/<包名>/files/ 目录下 下面就展示如何在内部存储设备中存储和加载本地文件: 1.创建一个名为 DataStorage的工程 2.准备好布局文件(acti

Android存储和加载本地文件(外部存储设备)

有时候应用需要将数据写入到设备的外部存储上.列如,需要同其他应用或用户共享音乐.图片或者网络下载资料时,保存在外部设备的数据共享起来要比较方便.而且,外部设备通常具有更大的存储空间. 我们可以通过android.os.Environment.getExternalStorageDirectory()方法获取sdCard的路径.再在此路径下创建一个MyFiles的文件,将数据保存在MyFiles文件夹下. 下面就展示如何在外部存储设备中存储和加载本地文件: 1.创建一个名为 DataStorage

彻底理解android中的内部存储与外部存储

我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的时候又是清除的哪里的数据?读完本文相信你会有答案. 在android开发中我们常常听到这样几个概念,内存,内部存储,外部存储,很多人常常将这三个东西搞混,那么我们今天就先来详细说说这三个东西是怎么回事? 内存,我们在英文中称作memory,内部存储,我们称为InternalStorage,外部存储我

android 开发-数据存储之文件存储

android的文件存储是通过android的文件系统对数据进行临时的保存操作,并不是持久化数据,例如网络上下载某些图片.音频.视频文件等.如缓存文件将会在清理应用缓存的时候被清除,或者是应用卸载的时候缓存文件或内部文件将会被清除. 以下是开发学习中所写的示例代码,以供日后查阅: xml: 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="

对象存储、块存储、文件系统存储概念与区别

一.概念及区别 针对不同的应用场景,选择的分布式存储方案也会不同,因此有了对象存储.块存储.文件系统存储.这三者的主要区别在于它们的存储接口: 1.  对象存储: 也就是通常意义的键值存储,其接口就是简单的GET,PUT,DEL和其他扩展,如七牛.又拍,Swift,S3 2. 块存储: 这种接口通常以QEMU Driver或者Kernel Module的方式存在,这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的

Android中的内部存储与外部存储

http://www.androidchina.net/4106.html 1.内部存储 data文件夹就是我们常说的内部存储,当我们打开data文件夹之后(没有root的手机不能打开该文件夹),里边有两个文件夹值得我们关注,如下: 一个文件夹是app文件夹,还有一个文件夹就是data文件夹,app文件夹里存放着我们所有安装的app的apk文件,其实,当我们调试一个app的时候,可以看到控制台输出的内容,有一项是uploading -..就是上传我们的apk到这个文件夹,上传成功之后才开始安装.

块存储、文件存储和对象存储

一.块存储 典型设备:磁盘阵列,硬盘 块存储主要是将裸磁盘空间整个映射给主机使用的,就是说例如磁盘阵列里面有5块硬盘(为方便说明,假设每个硬盘1G),然后可以通过划逻辑盘.做Raid.或者LVM(逻辑卷)等种种方式逻辑划分出N个逻辑的硬盘.(假设划分完的逻辑盘也是5个,每个也是1G,但是这5个1G的逻辑盘已经于原来的5个物理硬盘意义完全不同了.例如第一个逻辑硬盘A里面,可能第一个200M是来自物理硬盘1,第二个200M是来自物理硬盘2,所以逻辑硬盘A是由多个物理硬盘逻辑虚构出来的硬盘.) 接着块