原文:Interviewer: Can sessionStorage Share Data Between Multiple Tabs?
session
session会话就是用户与服务端之间的一系列http请求和响应
localStorage和sessionStorage之间的区别
- localStorage里是数据会永久保存,只要没有被主动删除
- 关闭标签页或窗口就意味着结束会话,sessionStorage里的数据会被清除
存储在localStorage里的数据
- 可以在同一域名的不同标签下共享
- 不同域名之间不能共享
- 不同浏览器之间当然也不能共享
MDN中,sessionStorage的定义如下:
- 标签页的session只对特定的标签页有效
- sesion的有效期:只要页面/标签未关闭,session就存在,就算页面刷新或重载session也会存在
- 当新开一个浏览器标签页时,浏览器会根据顶级浏览器上下文新建一个新会话。
- 对同样的路径新开多个窗口或标签,每一个窗口/标签的session都是独立的
- 复制标签页会将标签页的session复制到新标签
- 关闭标签页或窗口,session会话结束,sessionStorage清空
- 对同一个url使用不同协议打开,session也不同
所以原生的sessionStorage并不能在标签页之间共享数据。
但是注意第5点:复制标签页会将标签页的session复制到新标签
当新页面是通过window.open
或link
打开时,新的页面会复制前一个页面的sessionStorage。
所以SessionStorage在上述情况中是可以在标签之间共享数据的。
同时stackoverflow中给出了一个解决方案:browser sessionStorage. share between tabs?
cookies
- 当浏览器访问请求服务,服务器创建一个cookie并随着响应(一般放在响应头里)返回给浏览器
- 浏览器每次访问服务器时,都会将对应的cookie随着请求发送给浏览器(一般放在请求头里)
- 浏览器一共可以存大约300个cookie,其中每个网址大概能存20个cookie
cookie的存储周期:
- 由set-cookie时设定
- 同样的域名可以共享cookie
所以cookies是客户端和服务端之间用来明确客户身份的,而sessionStorage和localStorage是用来在浏览器中存储客户身份的,是客户和客户端之间的
参考:
Sharing sessionStorage between tabs
browser sessionStorage. share between tabs?