首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

Cookie 技術在 Java ME 平台的實作:從原理到 RMS 儲存完整方案

     編輯:J2ME

Cookie 工作原理回顧

  1. 伺服器回應含 Set-Cookie Header。
  2. 客戶端儲存,下次請求同域同路徑自動帶上 Cookie: name=value。
  3. 屬性:Domain、Path、Expires/Max-Age、Secure、HttpOnly。

Java ME 無內建 Cookie 管理,需自行實作。

三步驟實作策略

1. 取得 Cookie (從回應 Header)

String SET_COOKIE = "Set-Cookie";
String SESSION_ID = "SessionID"; // 部分伺服器用此 Header
int i = 0;
String key;
while ((key = conn.getHeaderFieldKey(i)) != null) {
    if (key.equalsIgnoreCase(SET_COOKIE) || key.equalsIgnoreCase(SESSION_ID)) {
        String cookieStr = conn.getHeaderField(i);
        saveCookie(cookieStr, url);
    }
    i++;
}

2. 解析與儲存 Cookie

定義 Cookie Java Bean,含 name、value、path、expire (0 表 session cookie)。提供 parseCookie(String header, String uri) 靜態方法解析 Header 字串。

public class Cookie implements Serializable {
    private String name, value, path;
    private long expire; // 0 = session
    // getter/setter, serialize/deserialize (DataOutputStream/DataInputStream)
    // equals/hashCode 基於 name+path
    public static Cookie parseCookie(String header, String uri) { /* 解析邏輯 */ }
}

儲存策略:持久 Cookie 存入 RMS (Record Management System);Session Cookie 僅存記憶體 Map,應用結束即失效。

3. 發送 Cookie (請求前攔截)

String cookieHeader = collectCookie(url); // 從 RMS + 記憶體篩選 domain/path 未過期
if (cookieHeader != null) {
    conn.setRequestProperty("Cookie", cookieHeader);
}

完善細節

  • Domain 匹配:.google.com 符合 j2medev.com?否,需精確尾碼匹配。
  • Path 匹配:Cookie path 為請求 URI 父目錄才發送。
  • 過期清理:啟動時或定期掃描 RMS 刪除過期紀錄。
  • RMS 空間:Cookie 體積小,極適合 RMS 儲存。

參考實作

筆者著作《Java ME 核心技術與最佳實踐》中提供 httpme 網路框架,內含完整 Cookie 管理模組,歡迎參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved