一、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. 洛谷 P3671 [USACO17OPEN]Where's Bessie? 贝西在哪呢

    P3671 [USACO17OPEN]Where's Bessie? 贝西在哪呢 题目背景 农夫John正在测试一个他新发明的全自动寻找奶牛无人机,它能够照一张农场的图片然后自动找出奶牛的位置. 不幸 ...

  2. Springmvc JSON交互

    先上前端javascript.ajax代码 <pre name="code" class="javascript"> function testAj ...

  3. C++ 学习笔记(一些新特性总结3)

    C++ 学习笔记(一些新特性总结3) public.protected 和 private 继承 public 继承时,基类的存取限制是不变的. class MyClass { public: // ...

  4. JAVA学习第二十七课(多线程(六))- 多生产者多消费者问题(JDK1.5新特性)

    多生产者多消费者问题 以生产馒头 消费馒头为例. class Resource { private String name; private int count = 1; private boolea ...

  5. xcode5. 安装cocos2d-x 学习中。。。

    找了一些帖子  没搞出来,后来找到原因了   如今的cocos2d版本号在xcode.5上 没右模版了. 用命令行 来运行.看了官方的文档.最终攻克了--- 对于自己解决的问题都会感到点兴奋. .. ...

  6. 具体解释C++引用——带你走进引用的世界

     一.介绍引用 首先说引用是什么,大家能够记住,引用就是一个别名,比方小王有个绰号叫小狗.他的妈妈喊小狗回家吃饭.那就是在喊小王回家吃饭. 接下来我们用两行代码来声明一个引用(就拿小王和小狗来说吧 ...

  7. angularjs 遍历

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  8. django 笔记6 Ajax

    感谢alex~ .Django请求生命周期 输入url 进入 urls(路由系统) 指向 views(视图函数)->(获取模板) 里面的函数 再由函数返回字符串给用户 .路由系统 /index/ ...

  9. Intellij使用"easyexplore"

    刚开始接触Intellij,里面有很多东西还不太会用,平时在eclipse里面用的很方便的easyexplore能帮助快速打开文件目录,Intellij中本身就有这样的功能,只是默认没有开启,需要我们 ...

  10. [SCOI2008]着色方案 递推 记忆化搜索

    我们发现 $c_{i}$ 和 $k$ 的规模非常小我们还发现每种颜色的位置是不必知道的,只要这种颜色和相邻的颜色种类不同即可.定义状态 $f[a][b][c][d][e][last]$,代表有 $a$ ...