JavaScript中window.sessionStorage的具體使用
一、前言
在前端開(kāi)發(fā)中,我們經(jīng)常需要在瀏覽器端存儲(chǔ)一些臨時(shí)數(shù)據(jù),例如用戶(hù)的登錄狀態(tài)、表單輸入緩存、頁(yè)面跳轉(zhuǎn)參數(shù)等。除了使用 Cookie 和 localStorage,JavaScript 還提供了一個(gè)輕量級(jí)的數(shù)據(jù)存儲(chǔ)方式 —— sessionStorage。
本文將帶你全面了解 window.sessionStorage 的使用方法,包括它的生命周期、API 操作、適用場(chǎng)景及常見(jiàn)問(wèn)題,幫助你掌握這一重要的前端存儲(chǔ)工具。
二、什么是 sessionStorage?
? 定義:
sessionStorage 是 Web Storage API 提供的一種客戶(hù)端存儲(chǔ)機(jī)制,它允許你在瀏覽器中以鍵值對(duì)的形式臨時(shí)保存數(shù)據(jù)。
?? 關(guān)鍵特性:
- 存儲(chǔ)的數(shù)據(jù)僅在當(dāng)前會(huì)話(huà)期間有效(關(guān)閉頁(yè)面或標(biāo)簽頁(yè)后數(shù)據(jù)會(huì)被清除)
- 同一個(gè)網(wǎng)站的不同標(biāo)簽頁(yè)之間互不影響
- 數(shù)據(jù)不會(huì)自動(dòng)發(fā)送到服務(wù)器
? 支持瀏覽器:
現(xiàn)代主流瀏覽器均支持 sessionStorage,包括 Chrome、Firefox、Safari、Edge 等。
三、sessionStorage 的基本用法
? 1. 存儲(chǔ)數(shù)據(jù):setItem(key, value)
sessionStorage.setItem('username', 'Qwen');? 2. 讀取數(shù)據(jù):getItem(key)
const name = sessionStorage.getItem('username');
console.log(name); // 輸出: Qwen? 3. 刪除數(shù)據(jù):removeItem(key)
sessionStorage.removeItem('username');? 4. 清空所有數(shù)據(jù):clear()
sessionStorage.clear();
? 5. 獲取所有鍵名:key(index)
for (let i = 0; i < sessionStorage.length; i++) {
const key = sessionStorage.key(i);
const value = sessionStorage.getItem(key);
console.log(`${key}: ${value}`);
}四、sessionStorage 與 localStorage 的區(qū)別
| 特性 | sessionStorage | localStorage |
|---|---|---|
| 生命周期 | 當(dāng)前頁(yè)面會(huì)話(huà)期間(關(guān)閉頁(yè)面即失效) | 永久存儲(chǔ)(除非手動(dòng)清除) |
| 多標(biāo)簽共享 | 否(每個(gè)標(biāo)簽頁(yè)獨(dú)立) | 是(同一域名下共享) |
| 數(shù)據(jù)大小限制 | 一般為 5MB 左右 | 一般為 5MB 左右 |
| 是否隨請(qǐng)求發(fā)送到服務(wù)器 | 否(不參與 HTTP 請(qǐng)求) | 否 |
| 適用場(chǎng)景 | 表單緩存、頁(yè)面間傳參、臨時(shí)登錄信息 | 長(zhǎng)期用戶(hù)偏好設(shè)置、持久化數(shù)據(jù) |
五、sessionStorage 的典型應(yīng)用場(chǎng)景
? 1. 頁(yè)面間臨時(shí)傳參
適用于從 A 頁(yè)面跳轉(zhuǎn)到 B 頁(yè)面時(shí)傳遞參數(shù),如訂單編號(hào)、用戶(hù) ID 等。
// 頁(yè)面A:存儲(chǔ)數(shù)據(jù)
sessionStorage.setItem('orderId', '1001');
// 頁(yè)面B:讀取數(shù)據(jù)
const orderId = sessionStorage.getItem('orderId');
console.log(orderId); // 輸出: 1001?? 注意:跨域頁(yè)面無(wú)法訪(fǎng)問(wèn)相同 sessionStorage。
? 2. 表單數(shù)據(jù)緩存
當(dāng)用戶(hù)填寫(xiě)了部分表單但刷新頁(yè)面時(shí),可以通過(guò) sessionStorage 緩存已填寫(xiě)內(nèi)容。
<input type="text" id="nameInput" placeholder="請(qǐng)輸入姓名">
<button onclick="saveForm()">保存草稿</button>
<button onclick="loadForm()">恢復(fù)草稿</button>
<script>
function saveForm() {
const name = document.getElementById('nameInput').value;
sessionStorage.setItem('formName', name);
}
function loadForm() {
const savedName = sessionStorage.getItem('formName');
if (savedName) {
document.getElementById('nameInput').value = savedName;
}
}
</script>? 3. 控制頁(yè)面行為(如只提示一次)
某些彈窗或提示信息只需要在本次會(huì)話(huà)中顯示一次。
if (!sessionStorage.getItem('hasShown')) {
alert("歡迎來(lái)到本頁(yè)面!");
sessionStorage.setItem('hasShown', 'true');
}六、注意事項(xiàng)與常見(jiàn)錯(cuò)誤
| 場(chǎng)景 | 建議 |
|---|---|
| 存儲(chǔ)非字符串類(lèi)型 | ? sessionStorage 只能存儲(chǔ)字符串,復(fù)雜類(lèi)型需先使用 JSON.stringify() 轉(zhuǎn)換 |
| 數(shù)據(jù)安全 | ? 不應(yīng)存儲(chǔ)敏感信息(如密碼),因?yàn)樗敲魑拇鎯?chǔ) |
| 同源策略限制 | ? 只能在同源頁(yè)面訪(fǎng)問(wèn),不同子域名/協(xié)議/端口視為不同源 |
| 移動(dòng)端兼容性 | ? 所有現(xiàn)代移動(dòng)端瀏覽器都支持 |
| 事件監(jiān)聽(tīng) | ? 可通過(guò) storage 事件監(jiān)聽(tīng)變化(但僅在其他標(biāo)簽頁(yè)觸發(fā)時(shí)生效) |
七、進(jìn)階技巧:結(jié)合 JSON 使用復(fù)雜對(duì)象
const user = { name: "Qwen", age: 25 };
sessionStorage.setItem('user', JSON.stringify(user));
const storedUser = JSON.parse(sessionStorage.getItem('user'));
console.log(storedUser.name); // 輸出: Qwen八、總結(jié)對(duì)比表
| 方法 | 說(shuō)明 | 是否推薦 |
|---|---|---|
| setItem() | 設(shè)置鍵值對(duì) | ? 推薦 |
| getItem() | 獲取指定鍵的值 | ? 推薦 |
| removeItem() | 刪除指定鍵 | ? 推薦 |
| clear() | 清除所有數(shù)據(jù) | ? 推薦 |
| key() | 獲取指定索引的鍵名 | ? |
| length | 獲取存儲(chǔ)項(xiàng)數(shù)量 | ? |
九、結(jié)語(yǔ)
到此這篇關(guān)于JavaScript中window.sessionStorage的具體使用的文章就介紹到這了,更多相關(guān)JavaScript window.sessionStorage內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用JS獲取SessionStorage的值
- JS 中LocalStorage和SessionStorage的使用
- JS localStorage存儲(chǔ)對(duì)象,sessionStorage存儲(chǔ)數(shù)組對(duì)象操作示例
- JS中LocalStorage與SessionStorage五種循序漸進(jìn)的使用方法
- js前端存儲(chǔ)之sessionStorage使用方法舉例
- JavaScript中本地存儲(chǔ)(LocalStorage)和會(huì)話(huà)存儲(chǔ)(SessionStorage)的使用
- JavaScript本地儲(chǔ)存:localStorage、sessionStorage、cookie的使用
相關(guān)文章
詳解Python中l(wèi)ogging日志模塊在多進(jìn)程環(huán)境下的使用
許多應(yīng)用程序中都會(huì)有日志模塊,用于記錄系統(tǒng)在運(yùn)行過(guò)程中的一些關(guān)鍵信息,以便于對(duì)系統(tǒng)的運(yùn)行狀況進(jìn)行跟蹤。這篇文章給大家主要介紹了在Python中l(wèi)ogging日志模塊在多進(jìn)程環(huán)境下的使用,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2016-12-12
利用d3.js力導(dǎo)布局繪制資源拓?fù)鋱D實(shí)例教程
這篇文章主要給大家介紹了關(guān)于如何利用d3.js力導(dǎo)布局繪制資源拓?fù)鋱D的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組的實(shí)現(xiàn)示例
很多時(shí)候,跟后端接口開(kāi)發(fā)對(duì)接時(shí),因?yàn)樾枨蟮年P(guān)系,需要前端地區(qū)數(shù)據(jù)跟后端的數(shù)據(jù)要一一對(duì)應(yīng),有時(shí)候需要的是多維數(shù)據(jù),這篇文章主要介紹了JS一維數(shù)組轉(zhuǎn)化為三維數(shù)組的實(shí)現(xiàn)示例,感興趣的可以了解一下2021-12-12
alert中斷settimeout計(jì)時(shí)功能
在測(cè)試過(guò)程中發(fā)現(xiàn)alert會(huì)中斷settimeout的計(jì)時(shí)功能,關(guān)閉對(duì)話(huà)框后,settimeout的時(shí)間會(huì)重頭開(kāi)始計(jì)時(shí),而不是從中斷處,感興趣的朋友可以了解下2013-07-07
js點(diǎn)擊列表文字對(duì)應(yīng)該行顯示背景顏色的實(shí)現(xiàn)代碼
這篇文章主要介紹了js點(diǎn)擊列表文字對(duì)應(yīng)該行顯示背景顏色的實(shí)現(xiàn)代碼,感興趣的小伙伴可以參考下2015-08-08
關(guān)于promise.all()的使用及說(shuō)明
這篇文章主要介紹了關(guān)于promise.all()的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

