티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
Why does Android WebView sporadically not sending my session cookie?
왜 안드로이드 WebView가 때때로 내 세션 쿠키를 보내지 않을까요?
문제 내용
I have a server that sends my android app a session cookie to be used for authenticated communication. I am trying to load a WebView with a URL pointing to that same server and I'm trying to pass in the session cookie for authentication. I am observing that it works intermittently but I have no idea why. I use the same session cookie to make other calls on my server and these never fail authentication. I only observe this problem when trying to load a URL in a WebView, and it does not happen every time. Very frustrating.
내 앱 서버는 인증된 통신에 사용할 세션 쿠키를 안드로이드 앱에 보냅니다. 나는 그 같은 서버를 가리키는 URL을 가진 WebView를 로드하려고 하고, 인증에 사용하기 위해 세션 쿠키를 전달하려고합니다. 때로는 작동하지만 왜 작동하지 않는지 모릅니다. 나는 동일한 세션 쿠키를 내 서버에서 다른 호출을하는 데 사용하며 이러한 호출은 인증에 실패하지 않습니다. WebView에서 URL을로드하려고 할 때만이 문제가 발생하며 모든 경우에 발생하지 않습니다. 매우 답답합니다.
Below is the code that I'm using to do this. Any help will be greatly appreciated.
다음은이 작업을 수행하기 위해 사용하는 코드입니다. 어떤 도움이라도 크게 감사하겠습니다.
String myUrl = "http://example.com/";
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
Cookie sessionCookie = getCookie();
if(sessionCookie != null){
String cookieString = sessionCookie.getName() +"="+sessionCookie.getValue()+"; domain="+sessionCookie.getDomain();
cookieManager.setCookie(myUrl, cookieString);
CookieSyncManager.getInstance().sync();
}
WebView webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new MyWebViewClient());
webView.loadUrl(myUrl);
높은 점수를 받은 Solution
Thanks justingrammens! That worked for me, I managed to share the cookie within my DefaultHttpClient requests and WebView activity:
Justingrammens님 감사합니다! 그 방법이 제게는 잘 작동했고, DefaultHttpClient 요청 및 WebView 활동에서 쿠키를 공유할 수 있었습니다.
//------- Native request activity
private DefaultHttpClient httpClient;
public static Cookie cookie = null;
//After Login
List<Cookie> cookies = httpClient.getCookieStore().getCookies();
for (int i = 0; i < cookies.size(); i++) {
cookie = cookies.get(i);
}
//------- Web Browser activity
Cookie sessionCookie = myapp.cookie;
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
if (sessionCookie != null) {
cookieManager.removeSessionCookie();
String cookieString = sessionCookie.getName() + "=" + sessionCookie.getValue() + "; domain=" + sessionCookie.getDomain();
cookieManager.setCookie(myapp.domain, cookieString);
CookieSyncManager.getInstance().sync();
}
가장 최근 달린 Solution
After some time researching I've gathered some pieces that made me get to this solution. Once that CookieSyncManager is deprecated, this may be the best way to set a specific cookie for a webview in Kotlin nowadays, you shouldn't need anything else.
조사하면서 얻은 몇 가지 조각을 모아 이 솔루션을 얻을 수 있었습니다. CookieSyncManager가 더 이상 사용되지 않는 것을 고려하면, 이것이 현재 Kotlin에서 웹뷰를 위한 특정 쿠키를 설정하는 가장 좋은 방법일 수 있습니다. 더 이상 다른 것이 필요하지 않을 것입니다.
private fun setCookie(){
val webView = WebView(this) // this = context
val cookieManager = CookieManager.getInstance()
cookieManager.acceptCookie()
val domain = "https://www.yourdomain.com/"
webView.webViewClient = WebViewClient()
webView.settings.javaScriptEnabled = true
cookieManager.setCookie(domain,"$cookieKey=$cookieValue")
cookieManager.setAcceptThirdPartyCookies(webView, true)
webView.loadUrl(domain)
}
출처 : https://stackoverflow.com/questions/1652850/why-does-android-webview-sporadically-not-sending-my-session-cookie
'개발 > 안드로이드' 카테고리의 다른 글
안드로이드에서 ImageView 안에 이미지 지우기 (0) | 2023.02.27 |
---|---|
안드로이드 WebView에서 기존 .html 파일을 로드하는 방법 (0) | 2023.02.26 |
WebView 에서 파일 다운로드하기 (0) | 2023.02.25 |
액티비티 시작 시 키보드가 표시되지 않도록 하기 (0) | 2023.02.25 |
안드로이드에서 SMS 작성 화면을 보여주는 방법 (0) | 2023.02.25 |