Set-Cookie Header。Cookie: name=value。Java ME 無內建 Cookie 管理,需自行實作。
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++;
}
定義 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,應用結束即失效。
String cookieHeader = collectCookie(url); // 從 RMS + 記憶體篩選 domain/path 未過期
if (cookieHeader != null) {
conn.setRequestProperty("Cookie", cookieHeader);
}
.google.com 符合 j2medev.com?否,需精確尾碼匹配。筆者著作《Java ME 核心技術與最佳實踐》中提供 httpme 網路框架,內含完整 Cookie 管理模組,歡迎參考。