快速回答: SessionStorage 和 localStorage 都是基於瀏覽器的網頁儲存 API,允許網站在用戶的設備上儲存數據,但在持久性和範圍上有關鍵差異。localStorage 在會話和標籤之間無限期保留數據,而 sessionStorage 在瀏覽器標籤關閉時會刪除數據。從隱私的角度來看,localStorage 風險顯著更高,因為數據無限期存在,使其成為追蹤、指紋識別和根據 GDPR 等框架進行監管審查的更具吸引力的目標。
主要要點
- localStorage 無限期持續,直到明確清除;sessionStorage 在標籤或窗口關閉時被刪除。
- 兩種儲存類型都容易受到跨站腳本(XSS)攻擊,且沒有內建加密。
- localStorage 和 sessionStorage 的數據不會自動傳輸到伺服器,與 cookies 不同,但兩者都可以被同一來源的任何 JavaScript 完全讀取。
- 在頁面上加載的第三方腳本可以訪問 localStorage 數據,只要它們在同一來源上下文中運行。
- 根據 GDPR,未經用戶同意在 localStorage 中儲存非必要數據是合規違規,與放置追蹤 cookies 相同。
- 敏感數據如身份驗證令牌、密碼和個人可識別信息(PII)在沒有額外安全層的情況下,絕不應儲存在任何機制中。
- 私密/隱身瀏覽限制 localStorage 的持久性,但不消除 sessionStorage 在會話中的風險。
- 開發者應優先選擇 sessionStorage 用於臨時狀態,伺服器端會話或 HttpOnly cookies 用於身份驗證,並使用如 Biscotti CMP 的同意管理平台來管理儲存同意。
SessionStorage 和 LocalStorage 之間的區別是什麼?
SessionStorage 和 localStorage 都是 HTML5 網頁儲存 API 的一部分,但它們的持久性和標籤範圍行為定義了不同的用途。
localStorage 儲存沒有過期日期的鍵值對。數據在瀏覽器重啟、系統重啟和無限期不活動的情況下存活,直到用戶或應用程序明確刪除它。它在同一來源(協議 + 網域 + 端口)下的所有標籤和窗口之間共享。[1][5]
sessionStorage 僅在頁面會話的生命週期內儲存數據。當用戶關閉標籤或窗口時,數據就消失了。關鍵是,每個標籤維持自己的獨立 sessionStorage,在第二個標籤中打開相同的 URL 不會共享第一個標籤的 sessionStorage 數據。[1]
| 特徵 | localStorage | sessionStorage |
|---|---|---|
| 持久性 | 無限期 | 僅限於標籤/窗口生命週期 |
| 在標籤之間共享 | 是(同一來源) | 否(每標籤隔離) |
| 在頁面重新加載後存活 | 是 | 是 |
| 在標籤關閉後存活 | 是 | 否 |
| 儲存容量 | 每個來源約 5-10 MB | 每個來源約 5-10 MB |
| 伺服器傳輸 | 否 | 否 |
| HttpOnly 保護 | 不可用 | 不可用 |
這兩個 API 都遵循同源政策,因此 https://example.com 的頁面無法讀取 https://otherdomain.com 設置的儲存。[4]

localStorage 相較於 sessionStorage 是否存在隱私風險?
是的,localStorage 的隱私風險明顯高於 sessionStorage,主要因為其無限期的持久性和跨標籤的可訪問性。
寫入 localStorage 的數據可以在幾個月或幾年內累積,而用戶卻不知情。廣告商和分析供應商歷來將 localStorage 用作「超級 cookie」,這是一種追蹤標識符,因為大多數用戶不會想到手動清除瀏覽器儲存,這使得它在 cookie 刪除後仍然存在。相對而言,sessionStorage 在標籤關閉時自我銷毀,使其成為一個不太有用的追蹤向量。
localStorage 特有的主要隱私風險因素:
- 持久的追蹤標識符: 儲存在 localStorage 中的唯一 ID 可以在多次訪問中追蹤用戶,而不需要任何伺服器端 cookie。
- 跨標籤數據洩漏: 在同一來源的任何標籤中運行的任何腳本都可以讀取所有 localStorage 數據。
- 儲存事件廣播: 對 localStorage 的更改會在同一來源的其他打開標籤中觸發
storage事件,實現用戶無法觀察的跨標籤數據同步。[5] - 沒有自動過期: 與支持
Max-Age和Expires屬性的 cookies 不同,localStorage 沒有 TTL 機制。
網站是否可以使用 localStorage 和 sessionStorage 追蹤用戶?
網站可以並且確實使用 localStorage 進行持久追蹤。sessionStorage 對於追蹤的用途較少,但在會話內仍然存在監視風險。
一行 JavaScript 代碼 localStorage.setItem('uid', 'abc123') 創建了一個持久的標識符,這個標識符在 cookie 清除後仍然存在。這種技術有時被稱為「永恆 cookie」或基於儲存的重生,已在隱私研究中被記錄,這也是為什麼監管機構越來越將 localStorage 視為與 cookies 相同的同意規則。
sessionStorage 可以在單一會話內追蹤行為(頁面流、表單輸入、導航模式),但當標籤關閉時,該數據會消失,限制了其在長期分析中的效用。
數據在 SessionStorage 與 LocalStorage 中能保持多久?
localStorage 數據會持續存在,直到用戶明確刪除,無論是通過清除瀏覽器儲存、網站調用 localStorage.removeItem() 或 localStorage.clear(),還是瀏覽器強制執行儲存配額。[2]
sessionStorage 數據在創建它的標籤或窗口關閉時會自動刪除。它在同一標籤內的頁面重新加載中存活,但不會轉移到新標籤,即使用戶在某些瀏覽器中複製標籤。[1]
實際意義: 如果開發者將會話令牌儲存在 localStorage 而不是 sessionStorage 中,則該令牌在用戶登出後仍然會保留在設備上,除非應用程序明確刪除它。這是一個常見且後果嚴重的錯誤。
SessionStorage 是否比 localStorage 更具隱私性?
對於大多數隱私用例來說,是的,sessionStorage 是更尊重隱私的選擇。它在標籤關閉時自動刪除,意味著數據不會持續存在,減少了來自設備共享、被盜設備或法醫分析的暴露風險。
然而,sessionStorage 並不本質上是「私密的」。在活動會話中,它與 localStorage 一樣容易受到 XSS 攻擊。任何注入的腳本都可以調用 sessionStorage.getItem() 並實時竊取數據。[3]
如果數據僅在當前用戶交互中需要,請選擇 sessionStorage(例如,多步表單狀態、一次性導航令牌)。
如果數據確實需要在會話之間持續存在,請選擇 localStorage(例如,用戶 UI 偏好、非敏感設置),並確保它不包含任何個人可識別的信息。
哪些個人數據絕不應儲存在 localStorage 中?
以下類別的數據絕不應儲存在 localStorage 中(即使在 sessionStorage 中也應極其謹慎處理):[3]
- 身份驗證令牌(JWT、OAuth 令牌、會話 ID)
- 密碼或密碼哈希
- 信用卡或支付信息
- 政府發放的身份證號碼或社會安全號碼
- 與電子郵件地址或電話號碼結合的全名
- 醫療或健康記錄
- 根據 GDPR 被分類為「特殊類別」的任何數據(生物識別數據、健康數據、政治意見)
儲存在 localStorage 和 sessionStorage 中的數據默認是未加密的。任何擁有物理訪問設備的人,或任何能在頁面上執行的腳本,都可以以明文形式讀取這些數據。[3]
第三方腳本可以訪問 localStorage 數據嗎?
第三方腳本可以訪問 localStorage 數據,只要它們在與主頁相同的來源中加載和執行。這是一個關鍵且經常被低估的風險。
當網站通過 <script> 標籤嵌入第三方分析或廣告腳本時,該腳本在主頁的來源上下文中運行。它可以自由地讀取和寫入該網站的 localStorage。同源政策無法保護來自同一網站內部故意或無意包含的腳本。[4]
這在實踐中意味著: 如果一個網站在 localStorage 中儲存用戶標識符,並且還加載了一個第三方廣告腳本,該廣告腳本可以讀取該標識符並將其與跨站行為數據關聯,而用戶卻不知情或未經同意。
這也是為什麼同意管理平台重要的原因之一。Biscotti CMP 使網站能夠管理和記錄用戶對儲存操作的同意,包括基於 localStorage 的追蹤,幫助網站滿足其在 GDPR 和類似框架下的義務。
使用 localStorage 的 GDPR 影響是什麼?
根據 GDPR,任何個人數據或追蹤標識符的儲存,不論技術機制如何,都需要合法依據。對於通過 localStorage 進行的非必要追蹤,該依據幾乎總是明確的用戶同意。[2]
歐洲數據保護委員會已確認,用於分析、廣告或用戶分析的 localStorage 需遵循與 cookies 相同的同意要求。未經事先同意將追蹤標識符放入 localStorage 的網站面臨與使用未經同意的 cookies 相同的執法風險。
localStorage 在 GDPR 下的合規檢查清單:
- 審核所有由第一方和第三方腳本寫入的 localStorage 鍵。
- 將每個鍵分類:它是否對服務絕對必要,還是用於分析/廣告?
- 對於非必要儲存,將寫入操作置於已記錄的用戶同意之後。
- 為用戶提供明確的機制以撤回同意並觸發儲存刪除。
- 記錄數據控制者的合法利益或同意記錄。
一個正確配置的同意管理平台,如 Biscotti CMP,可以自動化這一同意生命周期的許多部分。
localStorage 是否可以跨不同網站訪問?
不可以。localStorage 嚴格限於創建它的來源(協議 + 網域 + 端口組合)。在 https://siteA.com 上的腳本無法讀取 https://siteB.com 設置的 localStorage 數據。[4]
然而,這種保護是有局限的。如果單一的廣告或分析提供商在 siteA.com 和 siteB.com 上加載其腳本,每個實例獨立寫入各自網站的 localStorage。然後,該提供商在伺服器端關聯數據,有效地實現了跨站追蹤,而不違反同源政策。
隱身模式和私密瀏覽如何影響 localStorage?
私密/隱身瀏覽創建一個臨時儲存區,當私密窗口關閉時會被刪除。在隱身會話中寫入的 localStorage 不會持續到主瀏覽器配置文件,並且無法在常規瀏覽窗口中訪問。
sessionStorage 在隱身模式下的行為與常規瀏覽相同:當標籤關閉時被刪除。
重要警告:
- 在活動的隱身會話中,localStorage 仍然可以被該會話的所有腳本讀取。
- 隱身模式無法防止基於 XSS 的實時數據竊取。
- 如果用戶登錄到瀏覽器同步,某些瀏覽器會在設備之間同步 localStorage,這種行為可能會將「本地」數據移至雲基礎設施。
如何清除 SessionStorage 和 localStorage 以保護隱私?
清除瀏覽器儲存是簡單的,但需要明確的操作,因為瀏覽器不會自動清除 localStorage。
瀏覽器級別的清除:
- Chrome:設置 > 隱私與安全 > 清除瀏覽數據 > 緩存的圖片和文件 + 網站數據
- Firefox:設置 > 隱私與安全 > Cookies 和網站數據 > 清除數據
- Safari:設置 > 隱私 > 管理網站數據
程序化清除(對開發者):
localStorage.clear()刪除該來源的所有鍵。sessionStorage.clear()刪除當前標籤會話的所有鍵。localStorage.removeItem('keyName')刪除特定鍵。
對於關心追蹤的最終用戶: 在瀏覽器設置中清除「網站數據」或「cookies 和儲存」將刪除所有網站的 localStorage 和 sessionStorage 內容。設計用於隱私的瀏覽器擴展可以在每個網站或每個會話的基礎上自動化這一過程。
開發者在使用網頁儲存時常犯的隱私錯誤是什麼?
最具後果的錯誤有一個共同根源:將客戶端儲存視為安全的伺服器端數據庫。
- 在 localStorage 中儲存 JWT: 儲存在 localStorage 中的身份驗證令牌對頁面上的任何腳本都是可訪問的。一個 XSS 漏洞會暴露每個用戶的令牌。應使用 HttpOnly cookies 來存儲身份驗證令牌。
- 沒有過期邏輯: localStorage 沒有 TTL。開發者在儲存數據時未建立過期邏輯,會使過時的敏感數據無限期留在設備上。
- 假設同源意味著安全: 同源政策阻止外部網站,而不是從同一網站內部加載的惡意腳本(XSS、受損的第三方庫)。
- 忽視第三方腳本訪問: 嵌入分析或廣告腳本而不審核它們從 localStorage 中讀取的內容。
- 未對追蹤儲存設置同意閘道: 在獲得用戶同意之前將分析標識符寫入 localStorage,這是直接的 GDPR 違規行為。[2]
- 儲存冗餘的 PII: 將包含完整用戶檔案的 API 響應緩存到 localStorage 中「以提高性能」,而不考慮暴露面。
IndexedDB 是否比 localStorage 更私密?
IndexedDB 並不本質上比 localStorage 更私密。兩者都受到同源政策的約束,都可以被頁面上運行的 JavaScript 訪問,並且都容易受到 XSS 攻擊。
IndexedDB 提供更大的儲存容量,並支持結構化數據和二進位塊,使其適合複雜的離線應用程序。但從隱私和安全的角度來看,風險是相當的。儲存在 IndexedDB 中的數據默認也是未加密的,並且在未明確刪除的情況下無限期存在。
在 IndexedDB 和 localStorage 之間的選擇應該基於數據的複雜性和容量需求,而不是隱私假設。在沒有應用層加密和嚴格訪問控制的情況下,兩者都不適合儲存敏感個人數據。
結論
SessionStorage 與 LocalStorage:網頁儲存 API 的隱私影響辯論不僅僅是一個技術註腳,它對用戶隱私、合規性和應用安全有直接影響。localStorage 的無限期持久性和跨標籤可訪問性使其在誤用時成為高風險的儲存機制,而 sessionStorage 在標籤關閉時自動刪除,使其成為臨時狀態的更可辯護選擇。
2026 年開發者和網站擁有者的可行後續步驟:
- 使用瀏覽器 DevTools(應用程序標籤)審核所有 localStorage 和 sessionStorage 的使用情況,包括第一方和第三方腳本。
- 立即從客戶端儲存中刪除任何身份驗證令牌、PII 或敏感標識符。
- 用 HttpOnly、Secure cookies 替換基於 localStorage 的身份驗證令牌儲存,這些 cookies 由伺服器端管理。
- 實施同意管理工作流程,使用如 Biscotti CMP 的平台,將非必要的 localStorage 寫入操作置於已記錄的用戶同意之後。
- 對於必須持續存在的任何 localStorage 數據,建立過期邏輯,並在登出時強制清理。
- 進行第三方腳本審核,以了解哪些外部代碼可以從您的來源儲存中讀取。
- 對開發團隊進行 XSS 預防培訓,作為針對兩種儲存類型的主要攻擊向量。
網頁儲存 API 是強大的工具。如果在沒有隱私紀律的情況下使用,它們會成為責任向量。如果在明確的範圍、同意管理和安全衛生的情況下使用,它們可以在不損害信任您應用程序的用戶的情況下發揮其預期作用。
常見問題
問:sessionStorage 和 localStorage 之間的主要區別是什麼? localStorage 在會話之間無限期持續數據,並且在同一來源的所有標籤之間共享。sessionStorage 僅在當前標籤的生命週期內儲存數據,並在標籤關閉時自動刪除。
問:localStorage 可以用來在沒有 cookies 的情況下追蹤用戶嗎? 可以。儲存在 localStorage 中的唯一標識符在 cookie 刪除後仍然存在,並可用於在多次訪問同一網站時追蹤用戶,作為持久的追蹤機制。
問:sessionStorage 是否安全用於儲存密碼? 不安全。sessionStorage 是未加密的,並且可以被頁面上運行的任何 JavaScript 訪問,包括注入的惡意腳本。密碼絕不應儲存在任何客戶端儲存機制中。
問:GDPR 是否適用於 localStorage? 是的。根據 GDPR,未經合法依據(通常是用戶對非必要目的的明確同意)在 localStorage 中儲存追蹤標識符或個人數據是合規違規,相當於未經同意的 cookie 使用。
問:第三方腳本可以讀取我的 localStorage 數據嗎?
可以,如果這些腳本在相同的來源中加載和執行。通過 <script> 標籤嵌入的第三方分析或廣告腳本在主頁的來源上下文中運行,可以讀取該來源的所有 localStorage 數據。
問:清除 cookies 是否也會清除 localStorage? 不一定。在大多數瀏覽器中,僅清除「cookies」不會清除 localStorage。用戶必須特別清除「網站數據」或「cookies 和其他網站數據」以刪除 localStorage 內容。
問:隱身模式是否安全以防止 localStorage 追蹤? 隱身模式防止 localStorage 數據在私密窗口關閉後持續存在,但在活動的隱身會話中,localStorage 仍然可以被頁面上的所有腳本讀取。
問:我應該使用什麼來替代 localStorage 儲存身份驗證令牌? 使用 HttpOnly、Secure、SameSite cookies 由伺服器端管理。這些 cookies 對 JavaScript 不可訪問,消除了 localStorage 帶來的基於 XSS 的令牌盜竊風險。
問:IndexedDB 是否比 localStorage 更安全? 不。IndexedDB 受到與 localStorage 相同的 XSS 漏洞和同源政策的約束。它提供更大的容量和數據結構支持,但沒有額外的隱私或安全保證。
問:localStorage 和 sessionStorage 可以容納多少數據? 大多數現代瀏覽器為每個來源的每種類型的儲存分配約 5 到 10 MB 的儲存空間,這比 cookies 的 4 KB 限制要多得多。[2]
參考文獻
[1] Sessionstorage - https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage?utm_source=openai
[2] What Is Localstorage Sessionstorage - https://inspectwp.com/en/knowledge-base/what-is-localstorage-sessionstorage?utm_source=openai
[3] Html5 Web Storage Security Risks Safeguarding Localstorage And Sessionstorage - https://www.dopethemes.com/html5-web-storage-security-risks-safeguarding-localstorage-and-sessionstorage/?utm_source=openai
[4] Localstorage - https://javascript.info/localstorage?utm_source=openai
[5] Localstorage Sessionstorage - https://www.w3docs.com/learn-javascript/localstorage-sessionstorage?utm_source=openai
[6] Cookies Vs Localstorage Vs Sessionstorage What Each One Exactly Means - https://www.interserver.net/tips/kb/cookies-vs-localstorage-vs-sessionstorage-what-each-one-exactly-means/?utm_source=openai