前言
所有人都知道,localStorage
和sessionStorage
的最大區別是生命周期,一個永久,一個僅針對一個會話期間有效。那么,到底什么是一個會話?多個標簽頁之間的數據是否會共享呢?
后台的session
我們對會話session
的認識一般都是從后台的session開始的,比如Java的session,它是基於往cookie寫入一個JSESSIONID
來實現的,所以,只要你不是打開一個隱身窗口,無論你開多少個標簽頁,不同標簽頁之間都會被認為是一個session,你在這個標簽頁登錄了,新開一個標簽輸入地址,仍然是登錄狀態。
sessionStorage的session
但是直到今天才發現,HTML5中的這個sessionStorage
和傳統后台的session
並不完全是同一個東西,主要是在多個標簽頁數據是否會共享的問題上的不同。
誤區:之前一直以為,同一個窗口,只要會話還沒有過期,不同標簽頁之間,相同域名下的sessionStorage
是一樣的。
正確答案:刷新當前頁面,或者通過location.href
、window.open
、或者通過帶target="_blank"
的a
標簽打開新標簽,之前的sessionStorage
還在,但是如果你是主動打開一個新窗口或者新標簽,對不起,打開F12你會發現,sessionStorage
空空如也。
也就是說,sessionStorage
的session
僅限當前標簽頁或者當前標簽頁打開的新標簽頁,通過其它方式新開的窗口或標簽不認為是同一個session
。
大家可以親自測試一下,手動打開的新標簽和點A標簽打開的新標簽效果完全不一樣。