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

Android HttpClient 手動管理 Cookie 完整範例

     編輯:程式設計綜合問答

情境

開發需登入驗證的 Android 客戶端,伺服器以 Set-Cookie 回傳 Session ID,後續請求必須攜帶 Cookie 才能維持登入狀態。

核心步驟

  1. 從回應標頭取得 Cookie
  2. 建立 CookieStore 並加入 BasicClientCookie
  3. 將 CookieStore 放入 HttpContext
  4. 執行請求時傳入該 HttpContext

程式碼實作

// 1. 取得 Cookie (登入成功後)
Header[] cookieHeaders = response.getHeaders("Set-Cookie");
List<Cookie> cookies = new ArrayList<>();
for (Header header : cookieHeaders) {
    cookies.addAll(CookieParser.parse(header.getValue())); // 需自行解析或用 HttpClient 內建
}

// 2. 建立帶 Cookie 的 HttpContext
CookieStore cookieStore = new BasicCookieStore();
for (Cookie cookie : cookies) {
    cookieStore.addCookie(cookie);
}
HttpContext localContext = new BasicHttpContext();
localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

// 3. 後續請求帶入 context
HttpGet httpGet = new HttpGet("https://api.example.com/user/profile");
HttpResponse response = httpClient.execute(httpGet, localContext);

進階:自動管理 Cookie (推薦)

若不想手動處理,直接建立共用 DefaultHttpClient 實例並設定 CookieStore,所有請求自動攜帶/更新 Cookie:

// Application 級單例
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.setCookieStore(new BasicCookieStore()); // 持久化可儲存至 SharedPreferences

// 所有請求共用此 client,Cookie 自動管理
HttpResponse resp = httpClient.execute(httpGet);

注意事項

  • Android 6.0+ 已移除 org.apache.http 套件,建議遷移至 OkHttp 或 HttpURLConnection + CookieManager
  • Cookie 持久化需自行序列化至 SharedPreferences,下次啟動還原
  • 注意 Secure、HttpOnly、SameSite 屬性對安全性的影響
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved