项目中踩过的坑之-sessionStorage

2023-06-25,

总想写点什么,却不知道从何写起,那就从项目中踩过的坑开始吧,希望能给可能碰到相同问题的小伙伴一点帮助。

项目情景:

有一个id,要求通过当前网页打开一个新页面(不是当前页面),并把id传给打开的新页面,然后新页面在初始化时候使用这个id,发送请求········。

解决方案:

第一个小伙伴选择了cookie,总所周知cookie可以在同源网页间共享。我建议他不要用,因为cookie在页面发送请求的时候都需要一同发送的,浪费带宽不好。

然后我骄傲的建议了他使用sessionStorage或者localStorage,出于偷懒目的~我让他选择了sessionStorage,关闭页面就自动清除,localStorage还需要调用removeItem进行清除。

小伙伴就使用了sessionStorage,哈哈,果然可以传给打开的新页面id信息,还没高兴多久,问题又来了,又有新的入口打开新的页面不需要传递id,这简单呀,就只要打开一个然后在新页面

使用完sessionStorage的id就清空好了,这样就不会出现只想打开新页面的时候还出现之前依据老id加载页面的情况了。想法是简单的,现实是残酷的,实际效果还是按照老的id加载的,为啥呀

然后就是各种网上查资料,这才发现自己是如此的天真,在三篇文章中看到如下内容,不知道如何引用,暂且copy过来吧,写文章的都是好人········

sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。

不同浏览器无法共享localStorage或sessionStorage中的信息。相同浏览器的不同页面间可以共享相同的localStorage(页面属于相同域名和端口),但是不同页面或标签页间无法共享sessionStorage的信息。这里需要注意的是,页面及标签页仅指顶级窗口,如果一个标签页包含多个iframe标签且他们属于同源页面,那么他们之间是可以共享sessionStorage的。

上面红色的字总结一下就是不同页面是无法使用sessionStorage的,可是为啥通过超链接或者window.open新页面的时候是可以传递sessionStorage的呀,感觉有点歪打正着的感觉······经过多次实验,发现了一个惊天秘密,打开的新页面的sessionStorage是通过原网页的sessionStroage复制传递过来的,也可以理解为新网页的sessionStorage是原网页的sessionStorage的复制出来的独立体,每个网页的sessionStorage都是一个独立的,原来是这样啊。哈哈,下面就简单了,只要用完就把原网页的sessionStorage清掉就好了哈。。。。。突然发现,想偷懒是不可能的了。。。。可是问题又来了,我咋知道啥时候新网页获取好sessionStorage,是不是有点想喷血的赶脚。。。。

然后我又骄傲的在原网页设置好sessionStorage的代码下面,使用了st=setTimeout(function(){ sessionStorage.removeItem(XXX);clearTimeout(st)//此处显示出个人修养和最起码的职业操守,鉴定完毕},1000);

···········问题愉快的解决了,可是我还在回想,假如当初讲究一下使用cookie,或者当时不想偷懒,直接使用localStorage就木有这么多问题了吧,哎,世事无常,想偷懒反而花费更多的时间和精力,反而学到了很多东西,假如有啥更好的解决方法请在下方回复哈,希望我踩的这个坑可以给大家一些帮助。

项目中踩过的坑之-sessionStorage的相关教程结束。

《项目中踩过的坑之-sessionStorage.doc》

下载本文的Word格式文档,以方便收藏与打印。