[轉]sessionStorage在同一網站多個標籤頁內共享資料嗎?這取決於標籤頁如何開啟
-------------------------------------------------------
一直以來,我所以為的 sessionStorage 的生命週期是這樣的:在 sessionStorage 中儲存的資料會在當前瀏覽器的同一網站的多個標籤頁中共享,並在此網站的最後一個標籤頁被關閉後清除。注意:這是錯誤的。
我之所以會這麼認為,是因為我寫程式碼的時候,sessionStorage 給我的表現就是這樣的。
假設我們有一個 index.html
:
<!-- 使用一個新標籤頁開啟自身,並設定一個 sessionStorage --> <a href="index.html" target="_blank" onclick="sessionStorage.setItem('j', 's')"> open myself </a>
接下來:
- 在瀏覽器中開啟這個 index.html,我們稱之為標籤頁 A。注意:需要用 http 協議開啟!例如 http://localhost/index.html
- 點選頁面上的連結,此時會彈出來標籤頁 B。
- 在標籤頁 B 中開啟控制檯並執行
sessionStorage.getItem('j')
控制檯會輸出 's'
,這說明標籤頁 A 和 B 共享了 sessionStorage 中的資料;接下來,先關閉這兩個標籤頁,然後再開啟一個標籤頁 C,再讀取一下 j
的值,得到的是 null
。
這看起來跟本文一開始的說法是一致的,但今天我遇到了一個奇怪的事情……
我們給上面的步驟新增第四步
- 在瀏覽器中開啟這個 index.html,我們稱之為標籤頁 A。注意:需要用 http 協議開啟!例如 http://localhost/index.html
- 點選頁面上的連結,此時會彈出來標籤頁 B。
- 在標籤頁 B 中開啟控制檯並執行
sessionStorage.getItem('j')
,得到's'
- 新建一個新標籤頁 D,然後在位址列內輸入 http://localhost/index.html 開啟同樣的頁面, 然後執行
sessionStorage.getItem('j')
。
按照我的預期,標籤頁 D 得到的應該還是 's'
,畢竟我認為 sessionStorage 的資料是在同一網站的多個標籤頁之間共享的。但是我錯了
null
。
發生了什麼?為什麼標籤頁 B 中得到的是 's'
,為什麼標籤頁 D 中卻是 null
?
細心的同學可能已經發現了,標籤頁 B 和標籤頁 D 之間唯一的不同就是它們被開啟的方式:標籤頁 B 是通過在標籤頁 A 中點選連結開啟的,但標籤頁 D 是在瀏覽器位址列輸入地址開啟的。
我趕緊上 MDN 查了一下,上面是這麼說的:
...data stored in sessionStorage gets cleared when the page session ends...Opening a page in a new tab or window will cause a new session to be initiated, which differs from how session cookies work.
所以現在我明白了:通過點選連結(或者用了 window.open
)開啟的新標籤頁之間是屬於同一個 session 的,但新開一個標籤頁總是會初始化一個新的 session,即使網站是一樣的,它們也不屬於同一個 session。
相關推薦
[轉]sessionStorage在同一網站多個標籤頁內共享資料嗎?這取決於標籤頁如何開啟
------------------------------------------------------- 一直以來,我所以為的 sessionStorage 的生命週期是這樣的:在 sessionStorage 中儲存的資料會在當前瀏覽器的同一網站的多個標籤頁中共
多個執行緒之間共享資料的方式
ps:由於最近的面試很多問題都涉及多執行緒,自己感覺以前學的還是太淺,再展開學學吧。 今天先從考的比較頻繁的“多執行緒共享資料”開始。 一.目標 談到多執行緒共享資料,理想情況下我們希望做到“同步”和“互斥”。這是目標我們暫且把它先放到這。 二.分類 多執行緒共
Python通過Manager方式實現多個無關聯程序共享資料
Python實現多程序間通訊的方式有很多種,例如佇列,管道等。但是這些方式只適用於多個程序都是源於同一個父程序的情況。如果多個程序不是源於同一個父程序,只能用共享記憶體,訊號量等方式,但是這些方式對於複雜的資料結構,例如Queue,dict,list等,使用起來比較麻煩,不夠靈活。Manager是一種較為高階
java併發-多執行緒之多個執行緒之間共享資料(6)
多執行緒共享資料的方式: 1,如果每個執行緒執行的程式碼相同,可以使用同一個Runnable物件,這個Runnable物件中有那個共享資料,例如,賣票系統就可以這麼做。 2,如果每個執行緒執行的程式碼不同,這時候需要用不同的Runnable物件,例如,設計4個執行緒
【java併發】多個執行緒間共享資料
先看一個多執行緒間共享資料的問題: 設計四個執行緒,其中兩個執行緒每次對data增加1,另外兩個執行緒每次對data減少1。 從問題來看,很明顯涉及到了執行緒間通資料的共享,四個執行
6、多個執行緒的共享資料
1、方式 1,如果每個執行緒執行的程式碼相同,可以使用同一個Runnable物件,這個Runnable物件中有那個共享資料,例如,賣票系統就可以這麼做。 2,如果每個執行緒執行的程式碼不同,這時候需要用不同的Runnable物件,例如,設計4個執行緒。其中兩
多個執行緒之間共享資料的方式探討
例子:賣票:多個視窗同時賣這100張票,票就需要多個執行緒共享 a、如果每個執行緒執行的程式碼相同,可以使用同一個Runnable物件,這個物件中有共享資料。 賣票就可以這樣做,每個視窗都在做賣票任務,賣的票都是同一個資料。 b、如果每個執行緒執行的程式碼不同,就需要使用不
如何實現同一瀏覽器多個標籤頁之間的通訊(一)——localStorage
一、localStorage (1)localStorage是什麼? localStorage物件在修訂過的HTML5規範中作為持久儲存在客戶端資料的方案取代了globalStorage,是Stor
同一瀏覽器多個標籤頁之間的通訊(一)——localStorage
一、localStorage (1)localStorage是什麼? localStorage物件在修訂過的HTML5規範中作為持久儲存在客戶端資料的方案取代了globalStorage,是Storage的例項。 注意:要訪問一個localStorage物件,頁面必須來自同一
同一瀏覽器多個標籤頁之間的通訊(二)——cookie+setInterval
二、cookie (1)cookie是什麼? HTTP Cookie,通常直接叫做cookie,最初是在客戶端用於儲存回話資訊的。該標準要求伺服器對任意HTTP請求傳送Set-CookieHTTP頭作為相應的一部分,其中包含回話資訊。瀏覽器會儲存這樣的回話資訊,並在這之後
同一網站的多個域名之間訪問共享資訊
1. ContextSingleListener package test; import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import or
【轉】Mybatis傳多個參數(三種解決方案)
三種 方案 var nbsp myba rom name bsp 什麽 轉自: http://www.2cto.com/database/201409/338155.html 據我目前接觸到的傳多個參數的方案有三種。 第一種方案: DAO層的函數方法 Public
[轉] Spring Boot配置多個DataSource
pro img ssp 情況 每一個 所有 title 進行 rom [From] https://www.liaoxuefeng.com/article/001484212576147b1f07dc0ab9147a1a97662a0bd270c20000 Sprin
【K8S學習筆記】Part3:同一Pod中多個容器間使用共享卷進行通信
ash source net def exe tput stat policy container 本文將展示如何使用共享卷(Volume)來實現相同Pod中的兩個容器間通信。 註意:本文針對K8S的版本號為v1.9,其他版本可能會有少許不同。 0x00 準備工作 需要有一
ztree外掛同一頁面多個tree想要每個tree有獨立的點選事件
在同一個頁面如果有兩個tree,而且想要兩個tree的點選事件區別開來,需要設定獨立的一套setting和回撥函式,如下: //第一棵樹 var setting = { isSimpleData : true, //資料是否採用簡單 Ar
03-在tomcat部署網站多個網站
在Tomcat伺服器釋出兩個專案 CRM OA server.xml配置檔案 <Context docBase="C:\crm" path="/crm" /> <Context docBase="C:\oa" path="/oa" /> <Host nam
同一頁面多個ajax請求後臺堵塞問題
有個小夥子告訴我,一個頁面上同時開啟多個ajax,向後臺請求資料,會被堵塞。 “因為是同一個會話。但如果在控制器上加上這個特性就可以了”,小夥子說。 //session只讀,避免同一會話中ses
在SSH框架中,多個持久層物件相互引用,從而引發分頁查詢中,查詢所得的持久化物件轉換為JSON字串報錯的原因及解決方案
引言: 使用EasyUI框架的小夥伴們都知道,在使用datagrid(資料表格)時,會傳入如一個URL,用於請求資料表格中的所顯示的資料: <!--建立一個空表格--> <table id="mytable"></table>
同一頁面多個swiper出現錯亂問題
第一次使用swiper出現的各種奇葩問題,搞得頭疼 1.同一頁面存在多個swiper時,不能以通用的id或者class為定位標準,容易出現同時找到多個物件的問題,需要確保id和class的唯一性 2.動態建立swpie
Windows下Git多賬號配置,同一電腦多個ssh-key的管理
這一篇文章是對上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要對上一篇文章有所瞭解,當然直接往下看也可以,其中也有一些提到一些基礎的操作。 本文以配置github.com