sessionStorage的理解


SessionStorage 和 LocalStorage 使用操作基本類似,兩者最主要的區別在於生命周期不同,SessionStorage 顧名思義就是存在與會話階段,當會話結束時,SessionStorage 存儲的數據即會失效。那么關鍵來了什么才表示會話結束?其實在瀏覽器中一個活動標簽頁即代表一個會話Session,如果當前標簽頁被關掉即代表,當前會話結束,此時當前 SessionStorage 中存儲的數據就會被瀏覽器自動銷毀。

1、sessionStorage存儲數據的特點

(1)sessionStorage受到同源策略限制。

(2)sessionStorage存儲數據還受到瀏覽器選項卡的限制。

(3)手動新開一個選項卡,即便同域同URL,也不會共享sessionStorage數據。

(4)當前選項卡關閉,sessionStorage中存儲的數據也隨之被銷毀。

2、數據共享方式

首先要明確一個概念,在新選項卡或者窗口打開一個新的頁面,會新創建一個sessionStorage會話。

手動新開一個選項卡,即便同域同URL,也不會共享Sessionstorage數據。但是並不是說就沒有辦法共享sessionStorage存儲的數據,准確的說不是共享,而是拷貝一份。

刷新當前頁面,或者通過location.hrefwindow.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 中的數據會消失嗎?

不會

(3)采用target="_blank"的A標簽、window.open等方式打開新窗口后,新舊數據會同步嗎?

不會

(4)瀏覽器刷新到底做了什么?

瀏覽器刷新做的只是重新加載網頁數據【強制刷新的區別只是不使用瀏覽器緩存下來的HTML、JS數據,所有本頁面用到的HTML、JS都需要重新向服務器獲取】,並重新解析生成 DOM 樹,當然還同時會重新解釋執行 JavaScript 代碼,之后重新繪制頁面,注冊綁定事件,之前頁面在活動的時候對 JavaScript 變量做的數據賦值數據都會消失。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM