WebView로 로그인한 후, HttpClient를 호출하면... 그리고 그 반대도 마찬가지입니다.
안드로이드에서는 WebView와 HttpClient가 별도의 브라우저로 취급되는 것 같습니다.
이 문제는 여기저기서 설명된 바 있습니다.
[[Android]WebView, HTTPClient와 세션 공유 ] (http://d.hatena.ne.jp/shohhei1126/20120110/p1)
하지만 저는 아무것도 생각하지 않아도 되도록 동기화만 하는 클래스를 만들었습니다. 원하시면 꼭 해보세요.
[코드 lang="java" light="true"] package your.package;
import java.util.List;
org.apache.http.client.CookieStore를 import; org.apache.http.cookie.Cookie를 import; org.apache.http.impl.client.DefaultHttpClient를 import org.apache.http.impl.cookie.BasicClientCookie를 import
android.webkit.CookieManager를 import; android.webkit.CookieSyncManager를 import;
/** * HttpClient, WebViews 간 세션 동기화 클래스 */ public class SessionSync {
쿠키가 전송될 도메인을 지정하세요
private static final 문자열 YOUR_DOMAIN = "your.domain";
COOKIE 검색 도메인 (하위 도메인을 커버하는 .를 포함)
개인 정적 최종 문자열 COOKIE_DOMAIN = "." + YOUR_DOMAIN;
쿠키를 보내기 위한 URL
개인 정적 최종 문자열 COOKIE_URL = "http://" + YOUR_DOMAIN;
세션 ID를 저장할 매개변수 이름을 지정하세요
이것은 PHP의 한 예입니다
개인 정적 최종 문자열 SESSID = "PHPSESSID";
/**
* Http클라이언트 측의 세션 ID를 WebView와 동기화
*
* 세션 동기화를 위한 HttpClient @param
*/
public static void httpClient2WebView(DefaultHttpClient httpClient) {
쿠키스토어 스토어 = httpClient.getCookieStore();
List<Cookie> cookies = store.getCookies();
CookieManager cookieManager = CookieManager.getInstance();
(쿠키 쿠키 : 쿠키) {
if (cookie.getDomain().indexOf(COOKIE_DOMAIN) < 0) {
계속하세요;
}
만약 (! SESSID.equals(cookie.getName())) {
계속하세요;
}
여기서 삭제하면, 동기화 시 설정한 쿠키도 함께 사용됩니다
삭제는 사라질 수 있기 때문에 허용되지 않습니다
cookieManager.removeSessionCookie();
문자열 cookieStr = cookie.getName() + "=" + cookie.getValue();
cookieManager.setCookie(COOKIE_DOMAIN, cookieStr);
CookieSyncManager.getInstance().sync();
}
}
/**
* WebView 측의 세션 ID를 HttpClient와 동기화합니다
*
* 세션 동기화를 위한 HttpClient @param
*/
public static void webView2HttpClient(DefaultHttpClient httpClient) {
String cookie = CookieManager.getInstance().getCookie(COOKIE_URL);
String[] cookies = cookie.split("; ");
for (문자열 keyValue : cookies) {
keyValue = keyValue.trim();
String[] cookieSet = keyValue.split("=");
String key = cookieSet[0];
문자열 값 = cookieSet[1];
만약 (! SESSID.equals(key)) {
계속하세요;
}
BasicClientCookie bCookie = new BasicClientCookie(key, value);
bCookie.setDomain(COOKIE_DOMAIN);
bCookie.setPath("/");
쿠키스토어 스토어 = httpClient.getCookieStore();
store.addCookie(bCookie);
}
}
} [/코드]