cookie VS sessionstorge VS localstorge
虽然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的更多相关文章
- Light项目---vue搭建前端时遇见的一些问题
css样式中设置的: opacity 表示透明度 将js对象存储到localStorge中 的时候,直接存储是不行的,会变成[object Object],都是这样的数据, 需要将其进行JSON化处理 ...
- chrome工具调试
项目调试的困境 程序开发总会遇到各种各样的问题,为什么实际结果和预期结果不一致? 这个时候如果能深入程序内部抽丝剥茧去一探究竟再好不过! 而chrome工具是前端开发的杀手锏,经常听到的一句话是: 出 ...
- cookie和localstorge、sessionStorge的区别
一.背景由来 cookie原来是用来网络请求携带用户信息的,只不过在HTML5出现之前,前端没有本地存储的方法,只能使用cookie代替 localstorge.sessionStorge是html5 ...
- cookie,localstorge,sessionstorge三者总结
相同点:都是客户端存储东西的: 不同: 1大小,cookie最小;locastorge最大 2 cookie设置好会在header头里面自动带的:但是ls和ss不会:ls同个浏览下不同网页(非跨域)都 ...
- Cookie、LocalStorge、SesstionStorge 的区别和用法
前言 总括:详细讲述Cookie.LocalStorge.SesstionStorge的区别和用法. 1. 各种存储方案的简单对比 Cookies:浏览器均支持,容量为4KB UserData:仅IE ...
- web前端 3大储存 Cookie、localStorge、sessionStorage
Cookie: //setCookie function setCookie(name,value){ var Days = 30; var exp = new Date(); exp.setTime ...
- jquery.cookie用法详细解析,封装的操作cookie的库有jquery.cookie.js
jquery.cookie用法详细解析 需要注意存入cookie前,对数据进行序列化, 得到后在反序列化: 熟练运用:JSON.stringify();和JSON.parse(): 通常分为如下几个步 ...
- localstroge与cookie的区别
HTML5本地存储是一种让网页可以把键值对存储在用户浏览器客户端的方法.像Cookie一样,这些数据不会因为你打开新网站,刷新页面,乃至关闭你的浏览器而消失. 而与Cookie不同的时,这些数据不会每 ...
- 网页 cookie
定义: 从JavaScript的角度看,cookie 就是一些字符串信息.这些信息存放在客户端的计算机中,用于客户端计算机与服务器之间传递信息. 使用:document.cookie = 'usern ...
随机推荐
- 基于sklearn的分类器实战
已迁移到我新博客,阅读体验更佳基于sklearn的分类器实战 完整代码实现见github:click me 一.实验说明 1.1 任务描述 1.2 数据说明 一共有十个数据集,数据集中的数据属性有全部 ...
- netcore3.0 webapi集成Swagger 5.0
在项目中引用Swashbuckle.AspNetCore和Swashbuckle.AspNetCore.Filters两个dll,在Startup中的ConfigureServices相关配置代码如下 ...
- TCP server和client的一些测试
一.TCP server和client测试 socket设置 测试项/测试情景 send recv 测 server block client bloc ...
- 使用JAXP对xml文档进行DOM解析基础
XML解析方式分为两种:dom和sax dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式. sax: ...
- javaScript 时间转换,将后台返回的时间为一串数字转成正常格式
js完整代码: function transferTime(cTime){ var jsonDate = new Date(parseInt(cTime)); Date.prototype.forma ...
- Mybatis Generator插件和PageHelper使用
最近,开始接触web项目开发,项目使用springboot和mybatis,以前一直以为开发过程中实体类,mybatis的xml文件都需要自己手动的去创建. 同事推荐说Mybatis Generato ...
- Maven依赖机制理解
假设一个项目需要用到日志组件Log4j,那么有如下方式添加这个组件. 一.传统方式: 1.访问官网https://logging.apache.org/log4j/2.x/download.html, ...
- cug oj 1479 Treasure Chest Lock (区间dp 思维)
1479: Treasure Chest Lock Time Limit: 1 Sec Memory Limit: 128 MB Submit: 7 Solved: 5 [id=1479" ...
- Codeforces初体验
Codeforces印象 这两天抽时间去codeforces体验了一把. 首先,果然有众多大牛存在.非常多名人一直參加每周一次的比赛.积分2000+,并參与出题. 另外.上面题目非常多.预计至少一千题 ...
- UVA 1541 - To Bet or Not To Bet(概率递推)
UVA 1541 - To Bet or Not To Bet 题目链接 题意:这题题意真是神了- -.看半天,大概是玩一个游戏,開始在位置0.终点在位置m + 1,每次扔一个硬币,正面走一步,反面走 ...