一、cookie 、localStorage 、sessionStorage 、vuex 比较

cookie   4K    有时效性    可服务器传递

cookie是由服务器产生,存储在客户端的一段信息,在同源(即:协议、主机地址、端口号一致)的http请求头上携带(即使不需要)

在浏览器和服务器之前来回传递,用来处理客户端和服务器通信。

若设置了过期时间,则在过期时间之前,一直存储在浏览器中,即使窗口或浏览器关闭也有效。(保存在硬盘)

若不设置过期时间,窗口或浏览器关闭立即失效。(保存在内存)

HTTP这一列,如果在setCookie的时候,把HTTPOnly设置为true,这里就会打钩,那么cookies就只能被server服务器端来读取或是修改,客户端没有权限进行读取和修改。

例如,我们在进行身份验证的时候,就可以使用这个。

Secure:与安全相关,如果设置了,那么请求只能是来自HTTP加密请求。

HTML5 Web Storage   5M  仅本地保存,不会自动发送服务器    隐私模式不可读取、不可被爬虫抓取

WebStorage提供两种类型的API:localStorage和sessionStorage,两者的区别看名字就有大概了解

localStorage在本地永久性存储数据,除非显式将其删除或清空,sessionStorage存储的数据只在会话期间有效,关闭浏览器则自动删除。

两个对象都有共同的API用法,存储对象需要JSON.stringify、JSON.parse

  • length:唯一的属性,只读,用来获取storage内的键值对数量。
  • key:根据index获取storage的键名
  • getItem:根据key获取storage内的对应value
  • setItem:为storage内添加键值对
  • removeItem:根据键名,删除键值对
  • clear:清空storage对象

localStorage   永久存储(除手动删除) 保存在硬盘    兼容IE8+

打开同域的新页面也能访问到,在浏览器打开关闭期间都可以访问,存储在文件的C盘。

地址:C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Local Storage\leveldb

sessionStorage  临时存储  关闭页面即清空(刷新不清除)

页面会话在浏览器打开期间一直保持,并且重新加载(F5刷新)或恢复页面(即当前网址变为其他又还原)仍会保持原来的页面会话,不会消除存储数据。

VUEX  保存在内存 刷新页面清除

vuex是状态管理机制,一个组件的数据变化会映射到使用此数据的其他组件,即一个组件的数据变化,另一个组件也能相应到

vuex用于组件间传值,cookie、localStorage、sessionStorage用于页面间传值。刷新页面vuex存储的值丢失,其他三种不变;

不变的数据可用localStorage存储,更新的数据用vuex存储,与服务器沟通的数据用cookie存储。

二、对于不同窗口,不同标签页,不同浏览器下的sessionStorage、localStorag、cookie的状态

1.不同浏览器无法共享,即:在Chrome上存储的数据在FireFox上获取不到

2.相同浏览器下的不同窗口或同一窗口不同标签页共享cookie、localStorag

3.sessionStorage在任何情况下都不共享

在当前页面通过a链接或window.location、window.open等打开的新页面可以访问sessionStorage,但是不能共享(同步)。

故同一个窗口,不同标签页之间,相同域名下的sessionStorage可能不一样的。如下图:

     

     

但是如果主动打开一个同源的新窗口或新标签页,原先存储的sessionStorage并不存在

    

也就是说,sessionStorage仅限当前标签页或者当前标签页打开的新标签页,通过其它方式新开的窗口或标签不认为是同一个sessionStorage。

这是因为sessionStorage是页面级的,只有全部关闭当前页和从其内部打开的所有页面,或者直接关闭浏览器,才可以消除当前页的sessionStorage数据。

三、Web Storage API 的storage 事件

对 Storage 对象进行修改,触发 storage 事件。可以对storage事件进行监听,仅支持同源,不支持跨域

且storage 事件只会发送给同源、而且处于打开状态的其它页面,而不会发送给触发改变的页面本身及处于关闭状态的页面。

 使用:

      A 页面 :localStorage.setItem('key1', 'vakue1')

     B页面:window.addEventListener("storage", function (e) {           

                       e的参数值:

  });                     

A页面写入特定数据触发B页面的storage,页面B响应之后可以再写入数据,通知页面A处理结果,以实现页面通信。

用例:诸如微博应用的“换肤”功能,如果能够实现打开的多个窗口同时更换皮肤,势必能够提高用户体验。

四:postMessage

产品经理总是抱怨打开了多个窗口怎么就不能实现联动?

在一个窗口登录了其它窗口怎么就非得刷新才能使用一些功能?

这些统统可以通过跨页面通信解决。

postMessage(data,origin)方法允许来自不同源的脚本采用异步方式进行通信,可以实现跨文本档、多窗口、跨域消息传递。

发送:otherWindow.postMessage(message、targetOrigin、[transfer]);//调用postMessage方法的window对象是指要接受消息的那一个window对象

监听:message事件 window.addEventListener('message',function(event){alert(event.data)})

假设在a.html里嵌套个<iframe src="http://www.b.com/b.html" frameborder="0"></iframe>,在这两个页面里互相通信

a.com/a.html

 window.onload = function() {
window.addEventListener("message", function(event) {
alert(event.data);
});
// window.frames[0].postMessage("b data", "http://www.b.com/b.html"); //调用postMessage方法的window对象是指要接收消息的那一个window对象
}

b.com/b.html

window.onload = function() {
// window.addEventListener("message", function(event) {
// alert(event.data);
// });
window.parent.postMessage("a需要的数据", "http://www.a.com/a.html");
}

对比:

postMessage是从a窗口发送信息到b窗口,b窗口监听到消息后做出回应;而localStorage是在a窗口改变某一个存储值,b窗口监听到了存储值的变化,然后获取该值,进而完成通信的同样的效果。

这里推荐视频地址:https://ninghao.net/video/1220 

客户端本地存储(cookie、web Storage、vuex)选择的更多相关文章

  1. 利用HTML5开发Android(4)---HTML5本地存储之Web Storage

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

  2. HTML5本地存储之Web Storage应用介绍

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

  3. HTML5本地存储之Web Storage实例篇,最有用的是localStorage

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. HTML5 本地存储(Web Storage)

    HTML5 提供了两种在客户端存储数据的新方法: localStorage - 本地永久存储,下次打开浏览器数据依然存在 sessionStorage - 只存在于一个会话的数据存储,关闭浏览器数据会 ...

  5. HTML5客户端数据存储机制Web Storage和Web SQL Database

    引言 html5本地存储可以选择两种方式,一种是本地存储,一种是sqlite. 比如开发html5的购物车功能,就可以考虑选择其中之一,进行本地存储与操作. 又或者保存用户登录信息,可以使用local ...

  6. 客户端本地存储,web存储,localStorage

    HTML5 LocalStorage 本地存储 说到本地存储,这玩意真是历尽千辛万苦才走到HTML5这一步,之前的历史大概如下图所示: 最早的Cookies自然是大家都知道,问题主要就是太小,大概也就 ...

  7. 利用HTML5开发Android(7)---HTML5本地存储之Database Storage

    在上一篇<HTML5本地存储之Web Storage篇>中,简单介绍了如何利用localStorage实现本地存储:实际上,除了sessionStorage和localStorage外,H ...

  8. HTML5分析实战Web存储机制(Web Storage)

    Web Storage它是Key-Value在持久性数据存储的形式.Web Storage为了克服cookie把所引起的一些限制.当数据需要严格格控制client准时,没有必要不断地发回数据serve ...

  9. (转)HTML5开发学习(3):本地存储之Web Sql Database

    原文:http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416386.html HTML5开发学习(3):本地存储之Web Sql Data ...

随机推荐

  1. BZOJ 3223 Splay区间翻转

    思路: 区间翻转的裸题 终于tm理解splay了-- //By SiriusRen #include <cstdio> #include <cstring> #include ...

  2. js之insertBefore(newElement,oldElement)

    insertBefore的用法,以及注意事项,并且模仿编写insertAfter()方法 DOM提供的一个名为insertBefore()的方法,用来将一个新元素插入到现有的元素的前面. 使用这个方法 ...

  3. TabHost的自定义

    使用自定义的TabHost可以不用继承TabActicity,但是要注意的是如果使用Activity作为Content的话,有两处代码是一定要加的.不然就会出现RuntimeError,还有在XML布 ...

  4. Boom

    紧急事件!战场内被敌军埋放了n枚炸弹! 我军情报部门通过技术手段,掌握了这些炸弹的信息.这些炸弹很特殊,每枚炸弹的波及区域是一个矩形.第i枚炸弹的波及区域是以点(xi1,yi1)为左下角,点(xi2, ...

  5. Blink Coordinate Spaces

    Blink Coordinate Spaces Blink Coordinate Spaces Types of Zoom There are two types of zoom in Chromiu ...

  6. SSD-2(代码部分介绍)

    single shot multibox detectior tensorflow 代码 一.SSD重要参数设置 在ssd_vgg_300.py文件中初始化重要的网络参数,主要有用于生成默认框的特征层 ...

  7. js中return 、return false 、return true、break、continue区别

    在开发中不熟悉这三者区别的同学,一般都知道return可以中止,但会根据字面意思觉得return true 中止当前函数执行,但其后的函数还会继续执行.return false 中止当前函数执行,其后 ...

  8. java源码学习

    Collection List ArrayList LinkedList Vector Stack Set HashSet TreeSet Map HashMap TreeMap LinkedHash ...

  9. qduoj~前端~二次开发

    青岛大学qdu的onlinejudge是js的写的前端,框架是vue.js,在nodejs上部署运行,其实整体运行还是建立在docker的容器虚拟环境里,这里暂时不需要docker.安装环境是Ubun ...

  10. HDU 5068 Harry And Math Teacher 线段树+矩阵乘法

    题意: 一栋楼有n层,每一层有2个门,每层的两个门和下一层之间的两个门之间各有一条路(共4条). 有两种操作: 0 x y : 输出第x层到第y层的路径数量. 1 x y z : 改变第x层 的 y门 ...