Storage

  • 用途:存放需要在伺服器和客戶端間傳遞的小型資料(如用戶認證資訊)。

  • 大小限制:單個 cookie 約 4KB。

  • 存取範圍

    • 同一個域名下的所有頁面可以存取。

    • 每次 HTTP 請求時瀏覽器會自動附帶 cookie。

  • 有效期

    • 可手動設置有效期(Expires/Max-Age)。

    • 若未設置,會在瀏覽器關閉時刪除(Session Cookie)。

  • 安全性

    • HttpOnly:禁止 JavaScript 存取,防止 XSS 攻擊。

    • Secure:僅在 HTTPS 連線下傳送。


Local Storage

  • 用途:長期儲存客戶端資料,如應用設定、使用者偏好等。

  • 大小限制:約 5MB(視瀏覽器而定)。

  • 存取範圍:同一個域名下的所有頁面都可以存取。

  • 有效期:資料永久保存,除非手動清除或透過程式移除。

  • 安全性

    • 儲存於本地,不會自動傳送到伺服器。

    • 無法設置 HttpOnly,因此易受 XSS 影響。


Session Storage

  • 用途:在單一「會話期間」儲存臨時資料(如表單暫存資料)。

  • 大小限制:約 5MB。

  • 存取範圍

    • 僅限同一個瀏覽器「窗口/標籤頁」。

    • 不同標籤頁間無法共享。

  • 有效期:隨會話結束(關閉標籤頁或瀏覽器)自動清除。

  • 安全性

    • 類似 localStorage。

    • HttpOnly 屬性,需防範 XSS。


IndexedDB


IndexedDB 是什麼?

IndexedDB 是一種瀏覽器內建的 NoSQL 資料庫,適合儲存大量結構化資料,支援離線使用,功能比 localStorage/sessionStorage 強大許多。


IndexedDB 的特點

  • 儲存大量資料

    • 儲存容量遠超 localStorage(數百 MB~數 GB)。

    • 空間使用過多時瀏覽器可能會要求使用者授權。

  • 支援結構化資料

    • 可直接儲存物件、陣列、Blob、File 等複雜資料型別。

  • 離線存取

    • 支援離線應用,網路恢復後可再同步資料。

  • 非同步 API

    • 操作皆為非同步,不會阻塞 UI 執行緒。

  • 事務支援(ACID)

    • 確保資料的原子性、一致性、隔離性、持久性。

    • 所有讀寫必須在事務中進行。

  • 索引支援

    • 可以為資料欄位建立索引,提高搜尋效率。


IndexedDB 的基本結構

  • Database(資料庫)

    • IndexedDB 中可以有多個獨立的資料庫。

  • Object Store(物件存儲)

    • 類似 SQL 的資料表,用來儲存資料物件。

    • 每筆資料都有一個唯一的 key

  • Index(索引)

    • 對特定欄位建立索引,加速查詢速度。

  • Transaction(事務)

    • 所有操作必須在事務中進行,確保資料完整性。


IndexedDB 的應用場景

  • 離線網頁應用(PWA)

    • 如地圖、筆記、待辦清單等即使離線也能操作。

  • 大量資料儲存

    • 儲存使用者設定檔、內容管理系統(CMS)資料、緩存 API 回應等。

  • 多媒體內容管理

    • 儲存圖片、影片、檔案等大型二進制資料(Blob/File)。


小結

  • 如果是小型資料傳輸(認證資訊) ➔ 使用 Cookie

  • 如果是長期存在的資料(設定、喜好) ➔ 使用 Local Storage

  • 如果是短期暫存(會話期間使用) ➔ 使用 Session Storage

  • 如果是大量/複雜資料(離線、大容量儲存) ➔ 使用 IndexedDB

Last updated