詳細検索

안드로이드: WebView와 HttpClient 간 세션 동기화

아바타
글쓴이 furuyamah
5분 읽기
태그

안드로이드: WebView와 HttpClient 간 세션 동기화
日本語에서 번역 • 원문 보기

WebView로 로그인한 후, HttpClient를 호출하면... 그리고 그 반대도 마찬가지입니다.

안드로이드에서는 WebView와 HttpClient가 별도의 브라우저로 취급되는 것 같습니다.

이 문제는 여기저기서 설명된 바 있습니다.

[[Android]WebView, HTTPClient와 세션 공유 ] (http://d.hatena.ne.jp/shohhei1126/20120110/p1)

Http클라이언트와 WebView 통합

하지만 저는 아무것도 생각하지 않아도 되도록 동기화만 하는 클래스를 만들었습니다. 원하시면 꼭 해보세요.

 

 

 

[코드 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); 
    }
}

} [/코드]

Related Articles