在開發需與 Web 應用程式(如 Webmail、線上銀行)互動的 J2ME 應用時,客戶端 HTTP 狀態管理至關重要。標準 java.net 套件在 J2ME 環境中缺乏內建 Cookie 支援,開發者往往需自行實作或整合第三方庫。本文詳細探討一個基於核心 Java API 設計的輕量級 Cookie 管理庫,並從 MIDP 行動裝置開發角度剖析其架構與應用。
HTTP 本質上是無狀態協定:每個請求獨立處理,伺服器不保留先前請求的上下文。為了支援購物車、用戶登入會話、個性化內容等功能,必須引入狀態管理機制。Cookie 是伺服器透過 Set-Cookie 標頭送至客戶端的小型文字資料,客戶端儲存後於後續請求中自動附加 Cookie 標頭,從而維持會話狀態。
規範依據:IETF RFC 2965 (HTTP State Management Mechanism)。
| 屬性 | 說明 |
|---|---|
name=value | 核心鍵值對,必須項 |
Domain | 適用網域 (如 .example.com),決定哪些主機接收 Cookie |
Path | 適用路徑前綴 (如 /shop/),請求 URI 必須符合 |
Expires / Max-Age | 生命週期;缺失則為 Session Cookie,瀏覽器關閉即失效 |
Secure | 僅透過 HTTPS 傳輸 |
瀏覽器/客戶端發送 Cookie 時,依序檢查 Domain 匹配 → Path 匹配 → 未過期 三條件。
開發階段可透過瀏覽器設定「提示接受 Cookie」來觀察目標網站的 Cookie 策略:
瀏覽目標站點時,彈出的提示對話框即揭露其 Cookie 使用細節。也可直接檢視本機 Cookie 檔案 (IE: C:\Windows\Cookies\;Firefox: cookies.sqlite)。
本管理庫避免依賴 J2SE 專屬類別,僅使用 CLDC/MIDP 可用的核心 API:
java.lang.String、StringBuffer 處理解析與序列化java.util.Vector、Hashtable 管理 Cookie 集合javax.microedition.io.HttpConnection 取得/設定標頭javax.microedition.rms.RecordStore (RMS) 提供持久化儲存後續章節將詳細說明:
HttpConnection 迭代讀取 Set-Cookie / Set-Cookie2 標頭Cookie 物件,區分 Session Cookie (記憶體 Hashtable) 與持久 Cookie (RMS)Cookie 標頭完整原始碼範例請參考隨文附件的 CookieManager 類別實作。