2011-04-19 13 views
15

Obtendré un HttpResponse de un servidor al verificar si un nombre de usuario o contraseña es correcto. Cuando cargo el url en un webview quiero que el webView que tienen la cookie (la respuesta que obtengo con postData() almacenada en el webView. Quiero que la web View para recoger la cookie y cargar la URL con esa cookie almacenado en la vista web.Establezca una cookie en una vista web en Android

estoy recibiendo la respuesta a través

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; 
} 

Y LoadURL con:.

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

Supongo que realmente no estoy administrando una cookie y no tengo idea de cómo hacerlo. ¿Alguna sugerencia o solución?

+0

consulte esto http://stackoverflow.com/questions/2566485/webview-and-cookies-on-android –

Respuesta

8

Es probable que desee echar un vistazo a esta solución: Android WebView Cookie Problem

+0

El problema con esa solución es que él obtuvo la cookie de un método getCookie() y no tengo idea de cómo él escribió ese método. –

+0

¿Has mirado la solución en esa pregunta? Parece que hay un error en él, pero la idea general parece ser que están leyendo las cookies de su tienda de cookies httpclient y escribiéndolas en el CookieManager, luego usando CookieSyncManager para sincronizarlo con la vista web. – emmby

6

Es bastante simple en realidad.

String cookieString = "cookie_name=cookie_value; path=/"; 
CookieManager.getInstance().setCookie(baseUrl, cookieString); 

donde cookieString se formatea la misma como una cabecera HTTP más tradicional Set-Cookie y baseUrl es el sitio de la cookie debe pertenecer.

+0

Finalmente encontré una solución para esto, muchas gracias George. Pregunta rápida. ¿Sabes cuál sería la duración de la cookie de esta manera? o ¿cuál sería el parámetro para configurarlo? – JohnA10

+1

Esta es una cookie de sesión, por lo que probablemente caduque cuando la aplicación se cierre. Para que la cookie sea permanente, debe agregar la regla Expira para establecer una fecha de finalización definitiva. Busque en línea cómo agregar la caducidad de cookies. Si tiene problemas al poner esto en su lugar, siéntase libre de [preguntar] (http://stackoverflow.com/questions/ask) una pregunta detallada con una muestra de código. –

0

Solo quiero decir de otra manera cómo se puede hacer esto. No dice que es el mejor, pero es una manera. Puede usar JavaScript para establecer cookies también. Sólo anular onPageFinished en 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) 
       } 
     } 
} 

Una cosa con este enfoque: tendrá que recargar la web View. Si alguien sabe cómo solucionarlo, por favor comente.

Cuestiones relacionadas