開發需登入驗證的 Android 客戶端,伺服器以 Set-Cookie 回傳 Session ID,後續請求必須攜帶 Cookie 才能維持登入狀態。
CookieStore 並加入 BasicClientCookieCookieStore 放入 HttpContextHttpContext// 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);
若不想手動處理,直接建立共用 DefaultHttpClient 實例並設定 CookieStore,所有請求自動攜帶/更新 Cookie:
// Application 級單例
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.setCookieStore(new BasicCookieStore()); // 持久化可儲存至 SharedPreferences
// 所有請求共用此 client,Cookie 自動管理
HttpResponse resp = httpClient.execute(httpGet);
org.apache.http 套件,建議遷移至 OkHttp 或 HttpURLConnection + CookieManagerSharedPreferences,下次啟動還原Secure、HttpOnly、SameSite 屬性對安全性的影響