PowerScan
TC

Cookie、Local Storage 與 IndexedDB:工作階段到底是什麼

指紋瀏覽器 · 閱讀約 7 分鐘 · 作者:PowerOps

圖片:Unsplash

登入會寫入三個不同的地方。了解它們各是什麼,就能明白為什麼工作階段能熬過某些情況、卻在另一些情況下失效,以及為什麼同步設定檔必須搬移這三者。

"已登入"感覺像是一件事。實際上它至少是三件事,存在三個不同的地方,各有不同的生命週期,而這些差異可以解釋人們在機器之間搬移工作階段時遇到的大部分令人困惑的行為。

Cookie

小型的鍵值對,會隨每個送往設定它的網站的請求自動送出。工作階段權杖通常就存放在這裡。

Cookie 是三者中最小的,也是最關鍵的。失去它們,你就會被登出。

Local Storage 與 Session Storage

字串形式的鍵值儲存空間,由頁面 JavaScript 讀寫,範圍限定於各個來源。它絕不會隨請求送出,頁面必須主動去讀取。

應用程式會把偏好設定、快取的個人資料、功能旗標,以及經常還有重新整理權杖存放在這裡。Local Storage 會持續保存到被清除為止;Session Storage 只會持續到分頁關閉。

IndexedDB

瀏覽器裡一個真正的資料庫:有結構化的紀錄、索引和交易。現代網路應用程式的所有重要資料都放在這裡:快取的訊息記錄、離線佇列,以及端對端加密功能的加密金鑰。

為什麼這對設定檔很重要

這讓「隔離」有了明確的定義。當這三者都是分開的,再加上快取和擴充功能的狀態,兩個設定檔才算是隔離的。只隔離 Cookie 卻共用 IndexedDB 的工具,只解決了問題中容易的三分之一。

這也為在機器之間移動設定檔設下了門檻。只帶著 Cookie 走,只能重現工作階段的外形,卻沒有它的實質。

儲存空間由誰寫入通常存放
Cookie伺服器與頁面指令碼工作階段權杖、偏好設定、追蹤識別碼
Local Storage頁面指令碼重新整理權杖、介面狀態、快取的個人資料
Session Storage頁面指令碼每個分頁的狀態,分頁關閉時即丟棄
IndexedDB頁面指令碼快取資料、離線佇列、加密金鑰

在你自己的機器之間移動工作階段

PowerOps 會在設定檔關閉時擷取 Cookie、Local Storage 和 IndexedDB,並在它於其他地方開啟時還原。每個類別都是一個開關,可針對整個工作區或單一設定檔設定,因此你可以只搬移你打算搬移的部分。

關於這套機制,有兩點值得知道:

第二點是刻意設下的限制。兩台機器各自獨立編輯同一個工作階段,會產生兩個各只有一半有效的工作階段,而且往往讓兩邊的帳號都被登出。Cookie 存放區沒有辦法解決合併衝突。

實務上的重點

請正常關閉設定檔,而不是強制終止。關閉時的寫出動作,才讓工作階段得以搬移,這是這份清單上成本最低的習慣。

所有文章 · 開始掃描