虽然cookie , localstorge , sessionstorge三者都有存储的功能,但是还是有区别,

git上地址:https://github.com/lily1010/cookie-storge

我个人的总结如下:

一 Cookie问题

①Cookie是什么

Cookie 是一小段文本信息,伴随着用户请求和页面在 Web 服务器和浏览器之间传递。用户每次访问站点时,Web 应用程序都可以读取 Cookie 包含的信息,简单描述Cookie就像是访问服务器时服务器颁发给用户的“身份证”,下次访问的时候带回这身份证,服务器就能识别信息。

②Cookie特点

--如果不为Cookie设置它的生存周期的话,默认是关闭浏览器的时候就销毁Cookie。

--Cookie默认情况下是不允许出现中文字符的,如果我们要添加具有中文内容的Cookie时,我们需要使用java.net.URLEncoder先对中文进行编码,随后在进行Cookie的添加。读取Cookie时,需要使用java.net.URLDecoder对其进行解码。

--不同的浏览器对Cookie的存储都有一些限制,通常是Cookie数量和Cookie总大小的限制。像火狐对Cookie的限制是每个域名只能有50个Cookie值,总大小不能超过4097个字。

--Cookie在HTTP的头部,如果Cookie的量非常大,要做Cookie做压缩,压缩方法是将Cookie的多个K/V看作是普通的文本,做文本压缩。Cookie的规范中规定,Cookie仅能保存ASCII码为34~126的可见字符。

③Cookie缺点

--每次都跟随用户请求发送给服务器,浪费带宽。

--只能存固定长度的字符

--存不了复杂的数据,比如对象

--cookie还需要指定作用域,不可以跨域调用

--cookie需要前端开发者自己封装setCookie,getCookie方法

二 html5中 sessionstorge和localstorge问题

html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage。为了更大容量存储和复杂数据而设计的除此之外,它俩有setItem,getItem,removeItem,clear等方法

①sessionStorage是什么?

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。

②localStorage是什么?

localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

③它们的数据处理方法

// 保存数据到sessionStorage
sessionStorage.setItem('key', 'value'); // 从sessionStorage获取数据
var data = sessionStorage.getItem('key');
// 清空sessionStorage选定数据
var data = sessionStorage.removeItem("key");
// 清空sessionStorage所有数据
var data = sessionStorage.clear();

三 storage事件

先来看看storage事件的文档说明

The storage event is fired when a storage area changes, as described in the previous two sections (for session storage, for local storage).

When this happens, the user agent must queue a task to fire an event with the name storage, which does not bubble and is not cancelable, and which uses the StorageEvent interface, at each Window object whose Document 
object has a Storage object that is affected.

翻译过来,当存储的storage数据发生变化时都会触发它,但是它不同于click类的事件会冒泡和能取消,同时最后这句才是重点,storage改变的时候,触发这个事件会调用所有同域下其他窗口的storage事件,不过它本身触发storage即当前窗口是不会触发这个事件的

下面来看我的文件目录:

其中test1.html内容是:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
</head>
<body>
<input type="text" placeholder="请输入">
<button>保存数据</button>
<script type="text/javascript">
// 保存数据到sessionStorage
//sessionStorage.setItem('key', 'value'); // 从sessionStorage获取数据
//var data = sessionStorage.getItem('key'); // 清空sessionStorage选定数据
//var data = sessionStorage.removeItem("key"); // 清空sessionStorage所有数据
//var data = sessionStorage.clear();
var val = document.getElementsByTagName("input")[0];
var btn = document.getElementsByTagName("button")[0];
btn.onclick = function(){
var value = val.value;
if(!value) return;
localStorage.setItem("key", val.value);
};
if(window.addEventListener){
window.addEventListener("storage",handle_storage,false);
}else if(window.attachEvent){
window.attachEvent("onstorage",handle_storage);
}
function handle_storage(e){
console.log(e);
document.write("oldValue: "+ e.oldValue + " newValue:" + e.newValue)
}
</script>
</body>
</html>

其中test2.html内容是:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script type="text/javascript">
if(window.addEventListener){
window.addEventListener("storage",handle_storage,false);
}else if(window.attachEvent){
window.attachEvent("onstorage",handle_storage);
}
function handle_storage(e){
console.log(e);
document.write("oldValue: "+ e.oldValue + " newValue:" + e.newValue)
}
</script>
</body>
</html>

经过测试得出结论:(ps:前提页面test1.html和test2.html在同域下,并都是打开状态不同窗口)

页面test1.html下,有个input框用来存储store,它自身绑定了storage事件,这个时候写入新的数据点击保存,这时新的sotre数据保存了,但是页面test1.html的storage事件没触发,而页面test2.html下,绑定的storage事件则触发了.

问题①:既然改变的是同域下的其他页面数据,那么storage事件应用在那里?

答:多窗口间多通信用到它就是最好选择了,比如某块公用内容区域基础数据部分都是从store中提取的,这个区域中大多数页面中都有,当用户打开多个页面时,在其中一个页面做了数据修改,那其他页面同步更新是不是很方便(当前页面就要用其他方式处理了),当然用于窗口间通信它作用不仅仅如此,更多的大家可以利用它特性去发挥。

问题②:storage的events对象的常用属性有哪些?

oldValue:更新前的值。如果该键为新增加,则这个属性为null。

newValue:更新后的值。如果该键被删除,则这个属性为null。

url:原始触发storage事件的那个网页的网址。

key:存储store的key名;

cookie VS sessionstorge VS localstorge的更多相关文章

  1. Light项目---vue搭建前端时遇见的一些问题

    css样式中设置的: opacity 表示透明度 将js对象存储到localStorge中 的时候,直接存储是不行的,会变成[object Object],都是这样的数据, 需要将其进行JSON化处理 ...

  2. chrome工具调试

    项目调试的困境 程序开发总会遇到各种各样的问题,为什么实际结果和预期结果不一致? 这个时候如果能深入程序内部抽丝剥茧去一探究竟再好不过! 而chrome工具是前端开发的杀手锏,经常听到的一句话是: 出 ...

  3. cookie和localstorge、sessionStorge的区别

    一.背景由来 cookie原来是用来网络请求携带用户信息的,只不过在HTML5出现之前,前端没有本地存储的方法,只能使用cookie代替 localstorge.sessionStorge是html5 ...

  4. cookie,localstorge,sessionstorge三者总结

    相同点:都是客户端存储东西的: 不同: 1大小,cookie最小;locastorge最大 2 cookie设置好会在header头里面自动带的:但是ls和ss不会:ls同个浏览下不同网页(非跨域)都 ...

  5. Cookie、LocalStorge、SesstionStorge 的区别和用法

    前言 总括:详细讲述Cookie.LocalStorge.SesstionStorge的区别和用法. 1. 各种存储方案的简单对比 Cookies:浏览器均支持,容量为4KB UserData:仅IE ...

  6. web前端 3大储存 Cookie、localStorge、sessionStorage

    Cookie: //setCookie function setCookie(name,value){ var Days = 30; var exp = new Date(); exp.setTime ...

  7. jquery.cookie用法详细解析,封装的操作cookie的库有jquery.cookie.js

    jquery.cookie用法详细解析 需要注意存入cookie前,对数据进行序列化, 得到后在反序列化: 熟练运用:JSON.stringify();和JSON.parse(): 通常分为如下几个步 ...

  8. localstroge与cookie的区别

    HTML5本地存储是一种让网页可以把键值对存储在用户浏览器客户端的方法.像Cookie一样,这些数据不会因为你打开新网站,刷新页面,乃至关闭你的浏览器而消失. 而与Cookie不同的时,这些数据不会每 ...

  9. 网页 cookie

    定义: 从JavaScript的角度看,cookie 就是一些字符串信息.这些信息存放在客户端的计算机中,用于客户端计算机与服务器之间传递信息. 使用:document.cookie = 'usern ...

随机推荐

  1. Go语言入门——数组、切片和映射(下)

    上篇主要介绍了Go语言里面常见的复合数据类型的声明和初始化. 这篇主要针对数组.切片和映射这些复合数据类型从其他几个方面介绍比较下. 1.遍历 不管是数组.切片还是映射结构,都是一种集合类型,要从这些 ...

  2. Android 学习之路和App开发框架

    学习之路: 1. http://www.stormzhang.com/android/2014/07/07/learn-android-from-rookie/ 框架: 2. https://gith ...

  3. android listview 添加数据

    <span style="white-space:pre"> </span>listView = (ListView) findViewById(R.id. ...

  4. Android设置TextView行间距(非行高)

    Android设置TextView行间距(非行高) Android系统中TextView默认显示中文时会比较紧凑,不是很美观. 为了让每行保持一定的行间距,可以设置属性android:lineSpac ...

  5. hive界面工具SQL Developer的安装;使用sql developer连接hive;使用sql developer连接mysql

    需要oracle帐号登录后下载 1.下载: http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/inde ...

  6. 投影纹理映射(Projective Texture Mapping) 【转】

    摘抄“GPU Programming And Cg Language Primer 1rd Edition” 中文名“GPU编程与CG语言之阳春白雪下里巴人”  投影纹理映射( Projective ...

  7. NN优化方法对照:梯度下降、随机梯度下降和批量梯度下降

    1.前言 这几种方法呢都是在求最优解中常常出现的方法,主要是应用迭代的思想来逼近.在梯度下降算法中.都是环绕下面这个式子展开: 当中在上面的式子中hθ(x)代表.输入为x的时候的其当时θ參数下的输出值 ...

  8. hibernater-validator jar包冲突的问题

    在引用hibernater-validator jar包时一直抛出异常,在引用带有该包的项目,或者同时在一个项目中使用该包和validator包都会抛出以下异常 最后发现是在Eclipse环境下,不能 ...

  9. 网络通讯框架MINA和XSCOCKET的简单比较

    http://www.blogjava.net/ghostdog/archive/2008/06/10/MinaVsXsocket.html实在无聊,考虑把当前应用的通讯模式由http移植为socke ...

  10. asp.net MVC通用分页组件 使用方便 通用性强

    asp.net MVC通用分页组件 使用方便 通用性强   该分页控件的显示逻辑: 1 当前页面反色突出显示,链接不可点击 2 第一页时首页链接不可点击 3 最后一页时尾页链接不可点击 4 当前页面左 ...