关于Cookie、localStroage和sessionStorage的小结
今天和大家聊一聊有关Cookie、localStroage、sessionStorage在日常开发中会经常用到的,所以和大家简单分享一下。
一、Cookie
Cookie: HTTPCookie一般直接称之为cookie,最初是用来存储会话信息的,由HTTP服务器设置,然后保存在浏览器中,目前已近成为了一种标准。由于HTTP协议是一种无状态协议,在前端请求服务器对任何HTTP请求都需要携带cookie,其中包含着会话信息。特点:
- cookie在性质上是绑定在特定域名之下的,是不可跨域的,满足同源策略(即同协议,同域名,同端口),当设定了一个cookie之后,再给创建他的域名发送请求的时候都会包含这个cookie,这个限制确保了存储在cookie之中的信息只能让批准的接收到访问,而不能被第三方访问。比如,我们日常浏览网站的时候,百度和谷歌都会使用cookie,但是浏览器访问谷歌的时候只会携带谷歌的cookie而不会携带百度的cookie反之,访问百度的服务器的时候也就只能携带百度的cookie,cookie在浏览器由客户端来管理,浏览器能保证百度只能操作百度的cookie而不会操作谷歌的cookie。从而保障了用户的隐私安全。
- 因为cookie一般存储于客户端交互的信息,所以一般限制在4KB大小
- cookie的时间是不固定的,可是设置为几分钟,也可以设置为几个月。
二、LocalStorage和SessionStorage
这个两个都是前端的数据存储机制,一般两者的常用api如下:
- 用setItem(),和getItem()来设置和获取本地存储。
- 用removeItem()可以清除某个特定的变量缓存。
- 通过key()获取所有的本地缓存的key集合。
- 通过clear()清空本地缓存。
LocalStorage和SessionStorage有什么区别呢。?
LocalStorage满足同源策略(同协议,同域名,同端口)下的页面是可以共享LocalStorage的。而不同页面直接是不能共享SessionStorage的(注意,若是一个页面含有多个iframe,那么他们是可以共享SessionStorage的)
我们看如下代码:
<body>
<div>测试iframe框架</div>
<iframe src="./tree.html" frameborder="0" id="frame1" class="frame"></iframe>
<iframe src="./flex.html" frameborder="0" id="frame2" class="frame"></iframe>
<iframe src="./insert-frame.html" frameborder="0" id="frame3" class="frame inner-frame"></iframe>
</body>
//insert-frame.html
<script>
//我是在内嵌iframe insert-frame.html中设置的
window.localStorage.setItem('localSession-key','localSession-value-我是在内嵌iframe insert-frame.html中设置的')
window.sessionStorage.setItem('localSession-key','localSession-value-我是在内嵌iframe insert-frame.html中设置的')
</script>
上述代码我们在一个住页面中设置了三个iframe,然后在第三个内嵌的iframe中分别设置了LocalStorage和SessionStorage。我们在浏览器的Application中查看一下我们设置的值:
这时候我们先验证一下LocalStorage满足同源策略,在同源下打开另一个页面(上述截图注意url部分页面是iframe.html),我们打开同源下另一个页面,border-blibli.html
下过如下:
可以看到同源下的另一个页面是共享LocalStorage的。
在看看SessionStorage
可以看到在SessionStorage中是没有的。
下面我们看看 在iframe.html中内嵌了多个iframe是否会共享SessionStorage.
首先先切换ifrme,然后查看Application中的SessionStorage部分,看看是否有这个变量。如下图所示:
我们也可以通过window.sessionStorage.getItem()取出这个值。
三、关于生命周期
localStorage在同源页面下的所有tab都共享的,只要手动不清除,就会永远存在于本地缓存中的。
sessionStorage是能在单个页面中实现共享,页面关闭之后sessionStorage的信息就会消失(即一个会话结束了)。
四、LocalStorage与Cookie的比较
- localStorage中的文本信息只会存在于本地浏览器,不会随着HTTP请求发送到后端,除非手动设置,而Cookie会随着同源的HTTP请求发送到服务端
- localStorage的存储大小一般要大很多,一般是几兆,各个浏览器有所不同,而Cookie只有4KB
- localStorage中的信息只要不手动删除就会永远存在,而cooike的有效期是有限的,有默认值,也可以手动设定,而且和窗口无关
- 可以给localStorage设置监听storage事件(对storage做任何的修改都会在文档上触发storage事件),做数据变更的后续处理。
好了,今天就写到这儿,若大家有什么心得体会,欢迎一起交流。
推荐阅读
-
关于cookie的初识和运用(js和jq)
-
关于session和cookie的简单理解
-
sessionStorage 、localStorage 和 cookie 之间的区别详解
-
本地存储常用方式 localStorage, sessionStorage,cookie 的区别 和 服务器存储session
-
关于webpack2和模块打包的新手指南(小结)
-
关于用户禁用Cookie的解决办法和Session的图片验证码应用
-
关于Iframe如何跨域访问Cookie和Session的解决方法
-
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
-
关于JWT与cookie和token的区别说明
-
关于Angularjs中自定义指令一些有价值的细节和技巧小结