2011-04-19 5 views
15

사용자 이름이나 비밀번호가 맞는지 확인 할 때 서버에서 HttpResponse이 나옵니다. 나는 webview에서 url를로드 할 때 은 내가 webView 내가 픽업에 웹뷰에게 쿠키를 원하는 쿠키 (나는 webView. 에 저장 postData()으로 얻을 대답을하고, 웹보기에 저장된 쿠키와 URL을로드 할.안드로이드의 webView에 쿠키를 설정하십시오.

내가 통해 반응을 얻고있다

public HttpResponse postData() { 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("https://example.com/login.aspx"); 

    try { 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
     nameValuePairs.add(new BasicNameValuePair("txtUsername", "user")); 
     nameValuePairs.add(new BasicNameValuePair("txtPassword", "123")); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     HttpResponse response = httpclient.execute(httppost); 
     String responseAsText = EntityUtils.toString(response.getEntity()); 
     Log.v(TAG , "Response from req: " + responseAsText); 
     return responseAsText; 

    } catch (ClientProtocolException e) { 

    } catch (IOException e) { 

    } 
    return null; 
} 

그리고 함께 loadUrl :.

webView.loadUrl("http://a_page.com/getpage.aspx?p=home"); 

나는 쿠키를 정말로 관리하지 않고있는 것 같아. 나는 그렇게하는 법을 모른다. 제안이나 해결책이 있으십니까?

+0

이 참조 http://stackoverflow.com/questions/2566485/webview-and-cookies-on-android –

답변

8

당신은 아마이 솔루션에서 살펴 봐야 할 것입니다 : Android WebView Cookie Problem

+0

그 해결책의 문제는 그가 getCookie() 메서드에서 쿠키를 얻는 것입니다. 그는 그 방법을 썼다. –

+0

그 질문에서 해결책을 보았습니까? 거기에 버그가있는 것으로 보입니다. 그러나 일반적인 생각은 httpclient 쿠키 저장소에서 쿠키를 읽고 CookieManager에 쓰고 CookieSyncManager를 사용하여 웹뷰와 동기화한다는 것입니다. – emmby

6

정말 아주 간단합니다.

String cookieString = "cookie_name=cookie_value; path=/"; 
CookieManager.getInstance().setCookie(baseUrl, cookieString); 
cookieString는 전통적인 Set-Cookie HTTP 헤더와 같은 포맷

baseUrl는 쿠키에 속해야하는 사이트입니다.

+0

마침내 나는 이것을위한 해결책을 발견했다. 많은 George에게 감사한다. 빠른 질문. 이런 식으로 쿠키의 지속 기간을 알 수 있습니까? 또는 그것을 설정하는 매개 변수는 무엇입니까? – JohnA10

+1

이것은 세션 쿠키이므로 응용 프로그램을 닫을 때 만료됩니다. 쿠키를 영구적으로 유지하려면 만료 규칙을 추가하여 명확한 종료 날짜를 설정하십시오. 온라인에서 쿠키 만료를 추가하는 방법을 검색하십시오. 이 문제를 해결하는 데 문제가 있다면 코드 샘플을 사용하여 자세한 질문을 자유롭게 물어보십시오 (http://stackoverflow.com/questions/ask). –

0

어떻게이 일을 할 수 있는지 다른 방법을 던지고 싶습니다. 그것이 최선이라고 말하는 것은 아니지만 그것은 방법입니다. JavaScript를 사용하여 쿠키를 설정할 수도 있습니다. 다만이 방법 WebViewClient

new WebViewClient() { 

     override fun onPageFinished(view: WebView, url: String) { 

       val javascript = """document.cookie = "key=$value"""" 

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
        view.evaluateJavascript(javascript) { s -> Timber.d("Inject: %s", s) } 
       } else { 
        view.loadUrl("javascript:" + javascript, null) 
       } 
     } 
} 

한 가지에 onPageFinished를 오버라이드 (override) : 사용자가 웹보기를 다시로드해야합니다. 누구든지 그 문제를 해결하는 방법을 알고 있다면 의견을 말하십시오.

관련 문제