JavaScript中离线应用和客户端存储(cookies、sessionStorage、localStorage)

一、离线应用

所谓离线web应用,就是在设备不能上网的情况下仍然可以运行的应用。

开发离线web应用需要几个步骤:首先,确保应用知道设备是否能上网,以便下一步执行正确的操作;然后,应用还必须能访问一定的资源(图像、JavaScript、css等),只有这样才能正常工作;最后,必须有一块本地空间用于保存数据,无论能否上网都不妨碍读写。

1、离线检测

HTML5定义一个navigator.onLine属性,这个属性值为true表示设备能上网,值为false表示设备离线。

除了navigator.onLine属性之外,HTML5还定义了两个事件:online和offline。当网络从离线变为在线或者从在线变为离线时,分别触发这两个事件。

为了检测应用是否离线,在页面加载后,最好先通过navigator.onLine取得初始的状态。然后,就是通过上述两个事件来确定网络连接状态是否变化。当上述事件触发时,navigator.onLine属性的值也会改变,不过必须手工轮询这个属性才能检测到网络状态的变化。

2、应用缓存

HTML5的应用缓存,或者简称为appcache,是专门为开发离线Web应用而设计的。Appcache就是从浏览器的缓存中分出来的一块缓存区。

二、数据存储

1、cookie

是在客户端用于存储会话信息的。该标准要求服务器对任意http请求发送Set-Cookie Http头作为响应头的一部分,其中包括会话信息。

(1)限制

cookie在性质上是绑定在特定的域名下的。当设定了一个cookie后,再创建它的域名发送请求时,都会包含这个cookie。

由于cookie是存在客户端计算机上的,还加入了一些限制确保cookie不会被恶意使用,同时不会占用太多磁盘空间。

1、IE6以及更低版本限制每个域名最多20个cookie

2、IE7和之后版本每个域名最多50个。

3、Firefox限制每个域最多50个cookie。

4、Opera限制每个域最多30个cookie。

5、Safari和Chrome对于每个域的cookie数量限制没有硬性规定。

浏览器中对于cookie的尺寸也有限制。大多数浏览器都有大约4096B(加减1)的长度限制。为了最佳的浏览器兼容性,最好将整个cookie长度限制在4095B(含4095)

以内。

2、IE用户数据

在IE5.0中,微软通过一个自定义行为引入了持久化用户数据的概念。用户数据允许每个文档最多128KB数据,每个域名最多1MB数据。

<div style="behavior:url(#default#userData)" id="dataStore"></div>

var dataStore = document.getElementById("dataStore");
dataStore.setAttribute("name","xiaolu");
dataStore.setAttribute("book","javaScript");
dataStore.save("BookInfo");

在这段代码中,<div>元素上存入了两部分信息。在用setAttribute()存储数据之后,调用了save()方法,指定了数据空间的名称为BookInfo。下一次页面载入之后,可以使用load()方法指定同样的数据空间名称来获取数据;

dataStore.load("BookInfo");

alert(dataStore.getAttribute("name"));  //xiaolu
alert(dataStore.getAttribute("book"));   //javaScript

可以通过removeAttribute()方法明确指定要删除某元素数据,只要指定属性名称。删除之后,必须要再次调用save()来提交更改。

dataStore.removeAttribute("name","xiaolu");
dataStore.removeAttribute("book","javaScript");
dataStore.save("BookInfo");

对IE用户数据的访问限制和对cookie的限制类似。要访问某个数据空间,脚本运行的页面必须来自同一个域名,在同一个路径下,并使用与进行存储的脚本同样的协议。

和cookie不同的是,你无法将用户数据访问限制扩展到更多的客户。还有一点不同,用户数据默认是可以跨越会话持久存在的,同时也不会过期;数据需要通过removeAttribute()方法专门进行删除以释放空间。

cookie和IE用户数据并非安全,所以不能存放敏感信息。

三、Web存储机制

1、sessionStorage对象

sessionStorage对象存储特定于某个会话的数据,也就是该数据只保持到浏览器关闭。

2、localStorage对象

要访问同一个localStorage对象,页面必须来自同一个域名(子域名无效),使用同一种协议,在同一个端口上。数据保留到通过JavaScript删除或者是用户清除浏览器缓存。

限制:对于localStorage而言,大多数桌面浏览器会设置每个来源5MB的限制,Chrome和Safari对每个来源的限制是2.5MB。而iOS版的Safari和Android版的webkit的限制也是2.5MB

对sessionStorage的贤惠也是因浏览器而异。有的浏览器对sessionStorage的大小没有限制,但Chrome、Safari、iOS版Safari和Android版Webkit都有限制,也就是2.5MB。IE8+和Opera对sessionStorage的限制是5MB。

3.indexedDB

是在浏览器中保存结构化数据的一种数据库。最大特色是使用对象保存数据,而不是使用表来保存数据。

Web storage 和cookie的区别

Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。

除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。

但是Cookie是不可或缺的Lcookie的作用是和服务器进行交互,作为HTTP规范的一部分而存在,而Web Storage仅仅是为了在本地“存储”数据而生。

浏览器的支持处理IE7及以下不支持外,其他标准浏览器都完全支持,值得一提的是,IE7、IE6中的userData其实就是JavaScript本地存储的解决方案。通过简单的代码封装可以统一到所有的浏览器都支持Web Storage

 

localStorage和sessionStorage都具有相同的操作方法,例如setItem,getItem,removeItem等。

 

转载于:https://www.cnblogs.com/deerfig/p/7155841.html

### CookiesSessionStorage LocalStorage 的区别 #### 存储机制 Cookies 是一种较早的客户端存储技术,主要用于保存用户的登录状态或其他少量数据。它们通过 HTTP 请求头发送到服务器,在每次请求时都会被附加到请求中[^1]。 `sessionStorage` 提供了一种临时性的存储方式,仅限于当前浏览器窗口或标签页中的会话生命周期内有效。一旦关闭对应的窗口或标签页,其内容就会丢失[^2]。而 `localStorage` 则提供了持久化的键值对存储功能,除非手动清除或者覆盖原有数据项外不会消失。 #### 数据容量与有效期 关于数据量方面,Cookie每条记录大小上限通常不超过4KB;相比之下,Web Storage API下的两种形式都允许更大的空间——大多数现代浏览器支持至少5MB甚至更多用于localStoragesessionStorage同样如此但因属于短期性质所以实际应用上可能更少一些具体取决于实现环境的不同情况. 另外值得注意的是时间维度上的差异: Cookie可以设置过期日期(expiration date),如果未指定则默认当次访问结束之后自动删除;对于其他两者来说并没有内置这样的概念 - 即使存在某些特定条件下(比如用户主动清理缓存)可能导致信息丧失之外正常情况下Localstorage里的资料会长久保留下去直到人为干预为止 whereas Sessionstoragedata will be erased upon termination of browsing session regardless whether there has been any activity during this period or not . #### 安全性隐私保护措施 由于Cookie经常携带敏感的身份验证令牌等重要参数因此围绕着它的安全性设计格外严格包括但不限于HttpOnly标记防止JavaScript脚本读取以及Secure标志确保只在HTTPS连接下传输等等特性来增强防护力度 . 反观剩下的那两个选项虽然也具备一定的隔离机制比如说同源策略(Same-origin Policy)限制跨域操作但是总体而言缺乏专门针对恶意行为定制的安全手段所以在处理涉及个人机密之类的内容时候应该更加谨慎考虑采用更为稳妥的方式如加密后再储存之类的额外步骤加以保障 . ```javascript // Example usage of localStorage and sessionStorage localStorage.setItem('username', 'JohnDoe'); // Persists across sessions sessionStorage.setItem('gameState', JSON.stringify({ level: 10 })); // Only lasts until window/tab closes console.log(localStorage.getItem('username')); // Retrieves stored username from persistent store console.log(sessionStorage.getItem('gameState')); // Gets game state while tab/window remains open ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值