sessionStorage的理解
SessionStorage 和 LocalStorage 使⽤操作基本类似,两者最主要的区别在于⽣命周期不同,SessionStorage 顾名思义就是存在与会话阶段,当会话结束时,SessionStorage 存储的数据即会失效。那么关键来了什么才表⽰会话结束?其实在浏览器中⼀个活动标签页即代表⼀个会话Session,如果当前标签页被关掉即代表,当前会话结束,此时当前 SessionStorage 中存储的数据就会被浏览器⾃动销毁。
1、sessionStorage存储数据的特点
(1)sessionStorage受到同源策略限制。
(2)sessionStorage存储数据还受到浏览器选项卡的限制。
(3)⼿动新开⼀个选项卡,即便同域同URL,也不会共享sessionStorage数据。
(4)当前选项卡关闭,sessionStorage中存储的数据也随之被销毁。
2、数据共享⽅式
⾸先要明确⼀个概念,在新选项卡或者窗⼝打开⼀个新的页⾯,会新创建⼀个sessionStorage会话。
⼿动新开⼀个选项卡,即便同域同URL,也不会共享Sessionstorage数据。但是并不是说就没有办法共享sessionStorage存储的数据,准确的说不是共享,⽽是拷贝⼀份。
刷新当前页⾯,或者通过location.href、window.open、或者通过带target="_blank"的a标签打开新标签,之前的sessionStorage还在。sessionStorage 的session仅限当前标签页或者当前标签页打开的新标签页,通过其它⽅式新开的窗⼝或标签不认为是同⼀个session,即:
(1)通过⼿动⽅式新开⼀个选项卡或者窗⼝不会共享数据。
(2)通过JavaScript或者链接标签打开同源页⾯会共享数据(准确说是拷贝⼀份),两者是独⽴的。
假设A页⾯通过sessionStorage存储⼀些数据,页⾯中有⼀个链接指向同源的B页⾯。点击链接,在新的选项卡打开B页⾯,那么A页⾯的数据会被B页⾯共享(事实是拷贝了⼀份)。两个页⾯的数据是相互独⽴的,在B页⾯删除⼀条记录,并不会影响A页⾯中的数据。
注:通过带target="_blank"的a标签、window.open等⽅式打开新窗⼝时,会把旧窗⼝(或标签)的sessionStorage数据带过去,但从此之后,新窗⼝(或标签)的sessionStorage的增删改和旧窗⼝已经没有关系了,如果只是在当前标签内跳转新页⾯(或者刷新),数据还会保留(前提当然是同域)。
3、思考
(1)使⽤浏览器打开两个同样的⽹站,这两个⽹站的 SessionStorage 是共享的吗?
不共享
(2)当我们重新刷新⼀个页⾯那么 SessionStorage 中的数据会消失吗?sessionstorage和localstorage
不会
(3)采⽤target="_blank"的A标签、window.open等⽅式打开新窗⼝后,新旧数据会同步吗?
不会
(4)浏览器刷新到底做了什么?
浏览器刷新做的只是重新加载⽹页数据【强制刷新的区别只是不使⽤浏览器缓存下来的HTML、JS数据,所有本页⾯⽤到的HTML、JS都需要重新向服务器获取】,并重新解析⽣成 DOM 树,当然还同时会重新解释执⾏ JavaScript 代码,之后重新绘制页⾯,注册绑定事件,之前页⾯在活动的时候对 JavaScript 变量做的数据赋值数据都会消失。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论