상세 컨텐츠

본문 제목

[안드로이드] android.webkit.CookieManager 를 이용한 웹뷰와의 세션 공유

스마트기기개발관련/안드로이드 개발

by AlrepondTech 2020. 9. 20. 04:30

본문

반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

출처: http://tidev.kr/t/native-webview-cookie/195

 

안녕하세요.
현재 titanium 으로 열심히 개발을 하고 있고, 곧 완성을 앞두고 있습니다.

다름이 아니라 createHTTPClient() 를 이용해서 로그인을 하고 있습니다.
아이폰에서는 이 createHTTPClient 로 로그인을 하면 webview 에서도 로그인이 되어 있는걸로 나옵니다.
하지만 안드로이드에서는 로그인 되어 있지 않은 상태로 나오네요.

찾아보니 안드로이드는 native 와 webview 간의 cookie 공유가 안된다고 합니다.

http://xyunsikx.tistory.com/entry/안드로이드-POST-Login과-webview-cookie-sync132

지금까지는 createHTTPClient 에서 로그인이 되었을 때 cookie 값을 아래와 같이 propertie 에 저장하고 있습니다.

Ti.App.Properties.setString('cookie', ''+loginReq.getResponseHeader('Set-Cookie')+'');

그런 후 webview 를 띄울 때 아래처럼 cookie 값을 전달하려 하는데 안되네요 -_-;

$.helpdesk.addEventListener('beforeload', function () { 
    $.helpdesk.evalJS('document.cookie="'+Ti.App.Properties.getString('cookie')+'"'); 
});

혹시 안드로이드에서는 native 와 webview 사이에 로그인 세션 공유를 어떻게 해야 할까요?

 

 

forestkor김재경

'13 10월

 

저 같은 경우에는 md5암호화 해서 파라미터로 던져주는데요.
공유가 되면 편리하겠네요.

 

 

 

paolo2000명품도시인천

'13 10월

 

저도 하다 하다 모르겠어서 그냥 파라미터로 던져주는걸로 수정 했습니다.
답변 고맙습니다~

 

 

 

yomybaby이종은(Jong Lee)

'13 10월

 

@paolo2000 님이 첨부한 링크에서 사용한 CookieSyncManager를 이용하면 동기화가 가능하겠군요.
http://developer.android.com/reference/android/webkit/CookieSyncManager.html329

정확한 사용법을 파악한 후 모듈로 만들어 두면 편할 것 같은데 제가 한번 만들어 볼까요? ㅎ

 

 

 

yomybaby이종은(Jong Lee)

'13 10월

 

아니면 다른 분이 한번 들어주세요.^^ 참고가 될 만한 gist가 있네요.
https://gist.github.com/kosso/3926162214

 

 

 

yomybaby이종은(Jong Lee)

'13 11월

 

안드로이드 모듈을 한번 만들어보았는데
ti의 httpClient로 받은 Set-cookie를 webview에 쓰는 것 까지는 가능했습니다.
그런데 구글 문서에 나와있듯이 동기화는 안되네요.
다음주에 조금 더 해보고 현재 버전이라도 공유할께요.

 

 

 

yomybaby이종은(Jong Lee)

'13 11월

 

이런 만들면서 잘 안되길래 검색해봤더니..
3.2 버전에는 cookiemanager가 api로 노출 된답니다.^^ 
삽질했네요. 덕분에 android 모듈 만들기 살펴봤네요.ㅎㅎ

https://jira.appcelerator.org/browse/TIMOB-15244319

 

 

 

paolo2000명품도시인천

'13 11월

 

고생 많으셨습니다. 좋은 정보 항상 도움 받고 있습니다.

1 좋아요

 

 

 

 

반응형

 

 

728x90

 

 

 

 

10달 후

 

kakaro

'14 9월

 

httpclient에서 로그인기능을 구현하고 webview에서 세션을 공유하고 싶을 경우, 
(혹시나 도움이 될까해서 적습니다)

var domain  = "example.com";
var path       = "/";

var client = Ti.Network.createHTTPClient({
    onload : function(e) {

        // webview가 사용하는 systemCookie를 삭제합니다. 덮어 쓰고 싶지만 동일 명의 쿠키가 두개 생겨서 문제가 생기네요.
        Ti.Network.removeSystemCookies(domain, path, null);

        //  http클라이언트의 쿠키를 취득해서 webview가 이용하는 systemCookie에 추가합니다. JSESSIONID는 덮어쓰고 싶는 쿠키이름.
        var httpClientCookie = Ti.Network.getHTTPCookies(domain, path, "JSESSIONID");                         
        Ti.Network.addSystemCookie(httpClientCookie[0]);

    },
    onerror : function(e) {
       // error
    }
});

 

 

=================================

=================================

=================================

 

 

출처: https://www.fun25.co.kr/blog/android-cookiemanager-webview-session-sharing/?page=7

 

[안드로이드] android.webkit.CookieManager 를 이용한 웹뷰와의 세션 공유

안드로이드 앱에서 서버와 세션을 HttpURLConnection 등의 HTTP 클라이언트를 이용해서 맺은 후에 웹뷰에서 세션을 이용할려면 아래와 같이 안드로이드에서 제공하는 CookieManager 를 이용하면 됩니다.

HttpURLConnection 의 Set-Cookie 헤더에서 세션 쿠키를 얻어서 CookieManager 에 설정

 

HttpsURLConnection con = (HttpsURLConnection) url.openConnection();

String COOKIES_HEADER = "Set-Cookie";

con.connect();

Map<String, List<String>> headerFields = con.getHeaderFields();
List<String> cookiesHeader = headerFields.get(COOKIES_HEADER);

if(cookiesHeader != null) {
    for (String cookie : cookiesHeader) {
        String cookieName = HttpCookie.parse(cookie).get(0).getName();
        String cookieValue = HttpCookie.parse(cookie).get(0).getValue();

        String cookieString = cookieName + "=" + cookieValue;

        CookieManager.getInstance().setCookie("https://example.co.kr", cookieString);

    }
}

 

위와 같이 해 두면 CookieManager 는 url 로 해당 쿠키값을 관리를 합니다. 이 값은 앱을 종료하고 다시 실행해도 유지가 되며 웹뷰에서는 해당 사이트로 접속시 자동으로 세션 쿠키값을 세팅해서 접속을 하게 되어 세션이 유지가 됩니다.

API 21 이전까지는 CookieSyncManager 라는것이 있어서 쿠키를 싱크를 해 줘야 했다는데 21 이후부터는 안드로이드 OS 단에서 자동으로 관리를 한다고 합니다.

 

 

=================================

=================================

=================================

 

 

반응형


관련글 더보기

댓글 영역