2011-06-15 19 views
20

Estoy tratando de hacer una URLConnection que admita cookies. De acuerdo con la documentación que pueda usar:URLConnection con cookies?

CookieManager cookieManager = new CookieManager(); 
CookieHandler.setDefault(cookieManager); 

no pude conseguir que este código funcione, entonces vi esto sólo funciona para API 9 (2.3). Sin embargo, no recibo un error al utilizar CookieManager en un emulador anterior, existe CookieManager, pero no se puede construir. ¿Hay alguna manera de hacer que esto funcione para versiones anteriores? Intenté:

  cookieManager.setAcceptCookie(true); 
      URLConnection con = u.openConnection(); 

      con.setRequestProperty("Cookie", cookieManager.getInstance().getCookie(url);); 
      con.setDoOutput(true); 
      con.connect(); 
      String addCookie = con.getHeaderField("Set-Cookie"); 
      System.out.println(con.getHeaderFields().toString()); 
      if (addCookie!=null) { 
       cookieManager.getInstance().setCookie(url, addCookie); 
      } 

pero esto no funciona.

+0

¿Está el cliente o el servidor en este caso? Si usted es el cliente, ¿por qué está usando el encabezado 'Set-Cookie'? –

+0

Este cliente lee esto, es enviado por el servidor. http://curl.haxx.se/rfc/cookie_spec.html – NoBugs

+0

ohh hombre Me salvaste la vida ... no la respuesta sino tu pregunta ... gracias un looooooooooooooootttttttttttttttttttttttttttt – iAmLearning

Respuesta

14

pude activa las cookies utilizando la clase CookieManager de Ian Brown: http://www.hccp.org/java-net-cookie-how-to.html

Me cambió el nombre a IansCookieManager, defina una variable de clase _CM = new IansCookieManager, ahora es simple:

  URLConnection conn = u.openConnection(); 
      _CM.setCookies(conn); 
      conn.connect(); 
      _CM.storeCookies(conn); 
      ... 
+2

Es un administrador de cookies bastante bueno y básico. Me gusta. También me parece extraño que los ingenieros de Android tardaron tanto en incluir la clase 'java.net.CookieManager'. En cualquier caso, creo que las dos clases (la de Ian y la de java.net) solo almacenan las cookies temporalmente (es decir, solo se conservarán hasta que se mate el proceso de solicitud). Entonces, es muy posible que la próxima vez que el usuario inicie la aplicación, tengan que volver a iniciar sesión/etc. –

+2

Es cierto, a menos que haya serializado la clase y la haya guardado en alguna parte. Además, dejar y volver a la aplicación no es suficiente para 'salir' de la aplicación, por lo que las cookies y la sesión del navegador deben conservarse. – NoBugs

+0

Correcto, el usuario tendría que hacer algunas cosas intensivas de memoria en el medio para que el sistema elimine el proceso de la aplicación. Serializar la clase de administración de cookies es una buena idea. Probablemente sea mejor escribirlo en el almacenamiento interno usando ['openFileOutput()'] (http://developer.android.com/reference/android/content/Context.html#openFileOutput%28java.lang.String,%20int%29) ? En este momento utilizo un método realmente básico donde guardo solo la cookie de sesión única que me es devuelta como 'String' en' SharedPreferences'. Sin embargo, creo que voy a intentar usar este administrador de cookies serializable. –

Cuestiones relacionadas