@ Câu trả lời của David là tốt nhất trong số rất nhiều. Cách dễ nhất để duy trì CookieManager địa phương và tự ghi vào và đọc từ kho lưu trữ cookie được liên kết với trình quản lý cookie này.
Mã này tải cookie từ một phản ứng vào quản lý cookie:
/**
* Gets Cookies from the response header and loads them into cookie manager
*
* @param conn instance of {@link HttpURLConnection} object
* @param cookieManager the cookie manager({@link CookieManager} instance) in which the cookies are to be loaded<p>In case a null object is passed, the function will not perform any action and return back to the caller. </p>
*/
public static void loadResponseCookies(@Nullable HttpURLConnection conn,@Nullable CookieManager cookieManager) {
//do nothing in case a null cokkie manager object is passed
if (cookieManager == null || conn == null){
return;
}
List<String> cookiesHeader = conn.getHeaderFields().get(COOKIES_HEADER);
if (cookiesHeader != null) {
for (String cookieHeader : cookiesHeader) {
List<HttpCookie> cookies;
try {
cookies = HttpCookie.parse(cookieHeader);
} catch (NullPointerException e) {
log.warn(MessageFormat.format("{0} -- Null header for the cookie : {1}",conn.getURL().toString(), cookieHeader.toString()));
//ignore the Null cookie header and proceed to the next cookie header
continue;
}
if (cookies != null) {
Debug("{0} -- Reading Cookies from the response :", conn.getURL().toString());
for (HttpCookie cookie : cookies) {
Debug(cookie.toString());
}
if (cookies.size() > 0) {
cookieManager.getCookieStore().add(null, HttpCookie.parse(cookieHeader).get(0));
}
}
}
}
}
Mã này populates đối tượng HttpUrlConnection với cookie liên quan đến việc quản lý cookie:
public void populateCookieHeaders(HttpURLConnection conn) {
if (this.cookieManager != null) {
//getting cookies(if any) and manually adding them to the request header
List<HttpCookie> cookies = this.cookieManager.getCookieStore().getCookies();
if (cookies != null) {
if (cookies.size() > 0) {
Debug("{0} -- Adding Cookie Headers : ", url.toString());
for (HttpCookie cookie : cookies) {
Debug(cookie.toString(), null);
}
//adding the cookie header
conn.setRequestProperty(COOKIE_REQUEST_HEADER, StringUtils.join(cookies, ";"));
}
}
}
}
Đây là nhất thread cách an toàn để xử lý cookie.
Tôi đã thử sử dụng bếp nấu ăn theo chủ đề và một phần mở rộng của CookieManager.Cả hai cách tiếp cận này đều không có tác dụng trong trường hợp của tôi.
Nguồn
2016-05-30 11:53:09
Khi nào bạn nên đọc cookie? Ngay sau khi mở kết nối? Cảm ơn. – StackPWRequirmentsAreCrazy
+1 Khi sử dụng nhiều cookie, tôi đã có nhiều may mắn hơn khi sử dụng dấu chấm phẩy: 'TextUtils.join ("; ", msCookieManager.getCookieStore(). GetCookies()));' – Reafidy
Woah buddy! Tôi đã cố gắng để làm điều này với một kết nối liên tục http/kết nối httpurlconnection khi THIS là cách chính xác để xử lý phiên đăng nhập của tôi. Cảm ơn bạn vì câu trả lời này! – Jacksonkr