본문 바로가기
프로그래밍/Android

Android WebView Session 제거

by Mr-후 2018. 9. 18.
반응형


Android WebView Session 제거




이번에 운영중인 앱의 소소한 기능들이 대대적으로 변경되었다. 그동안 담당 개발자가 없다가 충원이 되면서 이런 저런 기능들의 문제점이나 버그 들을 디버깅하고 수정하고 있는 참이다. 


지난주 QA결과로 나온 현상은 로그인 된 사용자의 정보가 남아 있어 앱을 완전 종료한 후에 재구동을 하고 해당 메뉴로 들어가면 세션이 남아 있어 자동으로 사용자의 정보가 조회되어 나타나는 현상이 발견되었다. 


웹에서 세션을 종료하면 될 것 같은데(처음 접속하는 페이지에서..) 그게 그리 간단한 문제가 아닌 듯하다. 

그래서 앱에서 뭔가 할 수 있는것이 있을까? 하고 찾아봤더니 정말 있다. 


앱에서 웹뷰가 초기화 될 때 쿠키매니저를 통해 세션(Session)을 모두 삭제하는 것인데 의외로 간단한 예제이다.


안드로이드의 CookieManager를 이용 특정 버전의 SDK 이상에서부터 지원되는 메서드를 이용하면 된다. 


CookieManager cookieManager = CookieManager.getInstance();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

cookieManager.removeSessionCookies(new ValueCallback<Boolean>() {

@Override

public void onReceiveValue(Boolean aBoolean) {

Utils.debug(String.format("## 호출 ##"));

}

});

}

 

롤리팝 이전에는 콜백이 없은 removeSessionCookies()를 이용하면 된다고 되어 있는데 이것도 android.gradle 에 명시된 defaultConfig의 minSdkVersion에 따라 사용여부가 달라진다. 나의 경우 minSdkVersion이 14로 되어 있어 오류가 나왔는데 최소 21이상일 경우 사용이 가능하다고 한다. 




그리고 또 하나는 ThirdPartyCookies허용에 대한 코드 


if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

// Third Party Cookie block

CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);


// Lollipop 에서 HTTPS > HTTP 전송시 내장 브라우저에서 block. <img> ..

webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

}


안드로이드 웹뷰의 CookiManager 셋팅시 필요한 설정 중 하나다. 


반응형