Urlconnection y cookies de Android -- java campo con android campo con cookies campo con httpurlconnection camp Relacionados El problema

android URLConnection and cookies


0
vote

problema

Español

He estado luchando tratando de mantener una sesión después de un post de inicio de sesión y me preguntaba si alguien podría ayudar. Iba a probar Apache, pero el Android Documentación Estados que se han alejado de Apache a favor de la urlconnection de Java.

  1. Si tengo datos de cookies almacenados como un paquete extra, ¿cómo puedo tomar eso? ¿Datos y agregarlo de nuevo a la cookieManager?

  2. es una mala forma para almacenar los datos de cookies en una cadena y luego pasar ¿Para mi próxima actividad utilizando los extras del paquete?

  3. Tengo que crear una cookianager en cada actividad y básicamente almacenarlo después de cada solicitud, reasignarlo, luego emitir mi siguiente ¿Solicitud?

    // login.java: CookiManager privado LOGINCOOKIE = Nuevo CookiManager (); extras.putstring ("cookies", logincookie.tostring ());

      //LoggedIn.java: Bundle bundle = intent.getExtras(); String strCookies = bundle.getString("Cookies"); SummaryCookies = (CookieManager)strCookies; //I tried casting the strCookies back to a CookieManager, but that did not work. :(   

¿Cómo puedo obtener mis galletas de los estropitos y convertirlo de nuevo en un formato que entiende la cookieManager?

Original en ingles

I've been struggling trying to maintain a session after a post login and I was wondering if someone could help. I was going to try Apache, but the android documentation states they have moved away from Apache in favor of Java's URLConnection.

  1. If I have cookie data stored as a bundle extra, how can I take that data and add it back into the CookieManager?

  2. Is it bad form to store the cookie data into a string and then pass it to my next activity using the bundle extras?

  3. Do I have to create a CookieManager in every activity and basically store it after each request, reassign it, then issue my next request?

    //Login.java: private CookieManager loginCookie = new CookieManager(); extras.putString("Cookies", loginCookie.toString());

    //LoggedIn.java: Bundle bundle = intent.getExtras(); String strCookies = bundle.getString("Cookies"); SummaryCookies = (CookieManager)strCookies; //I tried casting the strCookies back to a CookieManager, but that did not work. :( 

How can I get my cookies from the strCookies and convert it back into a format that the CookieManager understands?

           

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

1 + 2) No creo que sea una buena manera de trabajar con una cookie, porque cuando detenga la aplicación, esta cookie también se eliminará. Debe guardarlos para almacenarlos persistentes y usarlos más tarde.

3) Tienes que implementar tu propia cocina, luego crear un cookieManager y configurar su valor predeterminado con CookieHandler.setDefault (...). Esto se aplica a todo el sistema, por lo que no debe crearlo para cada actividad.

4) Si aún desea utilizar su método. Puede obtener una cookie del encabezado de respuesta por el método GetHeaderFields () y la consulta "Configuración de cookie" y el encabezado "Configuración de cookie2". Construye la cadena de encabezado como esa "Configuración de cookie: su cadena-cookie-aquí" y use httpcookie.Parse (encabezado) para obtener su lista HttpCookie Objeto.

Este es un ejemplo para crear una tienda de cookies persistentes. Aquí está la fuente completa si necesita: https://github.com/nguyentrungduy/customize-cookiestore

  @Override public void add(URI uri, HttpCookie cookie) {     // TODO Auto-generated method stub     synchronized (this) {         URI uri2 = createURI(uri);         List<HttpCookie> cookies = mCookies.get(uri2);         if (cookies == null) {             cookies = new ArrayList<HttpCookie>();             mCookies.put(uri2, cookies);         } else {             cookies.remove(cookie);         }         cookies.add(cookie);         // Save into SharePreferenced         saveToPersistent(uri2, cookies);     } }  @Override public List<HttpCookie> get(URI uri) {     // TODO Auto-generated method stub     synchronized (this) {         List<HttpCookie> httpCookies = new ArrayList<HttpCookie>();         List<HttpCookie> values = mCookies.get(uri);         if (values != null) {             for (HttpCookie httpCookie : values) {                 if (!httpCookie.hasExpired()) {                     httpCookies.add(httpCookie);                 }             }         }          Set<Entry<URI, List<HttpCookie>>> set = mCookies.entrySet();         for (Entry<URI, List<HttpCookie>> entry : set) {             if (uri.equals(entry.getKey())) {                 continue;             }             List<HttpCookie> cookies = entry.getValue();             Iterator<HttpCookie> iterator = cookies.iterator();             while (iterator.hasNext()) {                 HttpCookie cookie = iterator.next();                 String domain = cookie.getDomain();                 if (!domainMatches(domain, uri.getHost())) {                     continue;                 }                 if (cookie.hasExpired()) {                     iterator.remove();                 } else if (!httpCookies.contains(cookie)) {                     httpCookies.add(cookie);                 }             }         }         return Collections.unmodifiableList(httpCookies);     } }   
 

1+2) I don't think it is a good way to work with a Cookie, because when you stop the app, this cookie also will be deleted. You should save them to persistent storage and use them later.

3) You have to implement your own CookieStore, then create a CookieManager and set its default with CookieHandler.setDefault(...). This applies to the whole-system so you shouldn't create it for every activity.

4) If you still want to use your method. You could get a Cookie from the response header by the getHeaderFields() method, and query "Set-Cookie", and "Set-Cookie2" header. Build your header String like that "Set-Cookie:Your-string-cookie-here" and use HttpCookie.parse(headerString) to get your list HttpCookie object.

This is an example for create persistent cookie store. Here is the full source if you need: https://github.com/nguyentrungduy/Customize-CookieStore

@Override public void add(URI uri, HttpCookie cookie) {     // TODO Auto-generated method stub     synchronized (this) {         URI uri2 = createURI(uri);         List<HttpCookie> cookies = mCookies.get(uri2);         if (cookies == null) {             cookies = new ArrayList<HttpCookie>();             mCookies.put(uri2, cookies);         } else {             cookies.remove(cookie);         }         cookies.add(cookie);         // Save into SharePreferenced         saveToPersistent(uri2, cookies);     } }  @Override public List<HttpCookie> get(URI uri) {     // TODO Auto-generated method stub     synchronized (this) {         List<HttpCookie> httpCookies = new ArrayList<HttpCookie>();         List<HttpCookie> values = mCookies.get(uri);         if (values != null) {             for (HttpCookie httpCookie : values) {                 if (!httpCookie.hasExpired()) {                     httpCookies.add(httpCookie);                 }             }         }          Set<Entry<URI, List<HttpCookie>>> set = mCookies.entrySet();         for (Entry<URI, List<HttpCookie>> entry : set) {             if (uri.equals(entry.getKey())) {                 continue;             }             List<HttpCookie> cookies = entry.getValue();             Iterator<HttpCookie> iterator = cookies.iterator();             while (iterator.hasNext()) {                 HttpCookie cookie = iterator.next();                 String domain = cookie.getDomain();                 if (!domainMatches(domain, uri.getHost())) {                     continue;                 }                 if (cookie.hasExpired()) {                     iterator.remove();                 } else if (!httpCookies.contains(cookie)) {                     httpCookies.add(cookie);                 }             }         }         return Collections.unmodifiableList(httpCookies);     } } 
 
 

Relacionados problema

26  Sube un archivo grande en Android sin error de SOOFMEMORY  ( Upload large file in android without outofmemory error ) 
Mi código de carga a continuación: from l in objectSet.Logs let match = objectSet.Logs.Where(whatever).FirstOrDefault() where l.Timestamp > ...

7  No se puede obtener el archivo PDF como datos binarios  ( Cannot fetch pdf file as binary data ) 
Estoy tratando de buscar un archivo PDF de: URL: https: // domain_name / xyz / _id / descargar / en donde no apunta a un archivo PDF directo y cada arch...

2  HTTP POST CUERPO PERDIDO IMPUESTOS (HTTPURLCONNECTORIO Y JETTY)  ( Http post body lost spuriously httpurlconnection jetty ) 
Tengo un protocolo de cultivo en casa que utiliza httpurlconnection (de Java 1.6) y AMP; Embarcadero (6.1.26) para publicar un bloque de XML como una solicitu...

2  Httpurlconnection c = url.openconnection (); C.SetRequestProperty () no funciona  ( Httpurlconnection c url openconnection c setrequestproperty doesnt work ) 
Este código aquí es una aplicación de Java normal, no una aplicación de Android, esto está diseñado para enviar mensajes C2DM a un dispositivo con tu_registra...

0  Httpurlconnection POST SOLICITUD BODY PHP Server?  ( Httpurlconnection post request body php server ) 
Tengo un servidor con un archivo. Failures: 1) FrontpageController GET 'frontpage' should be successful Failure/Error: get 'frontpage' ActionView::Templat...

8  Java HttpurlConnection devuelve 500 código de estado  ( Java httpurlconnection returns 500 status code ) 
Estoy tratando de obtener una URL usando HttpurlConnection, sin embargo, siempre recibo un código 500, pero cuando intento acceder a esa misma URL desde el na...

0  HttpurlConnection Outputstream Chinese Carácter  ( Httpurlconnection outputstream chinese character ) 
¡Utilizo httpurlconnection para publicar fuera de un json pero parece que los caracteres chinos están cambiando a ????? Intenté con un estilo de codificación ...

1  Java UrlConnection funciona con Windows, pero no con Linux  ( Java urlconnection works with windows but not with linux ) 
En mi programa Java, utilizo la conexión URL para obtener una URL.it funciona bien en Windows, pero debajo de Linux no funciona. Y quiero saber por qué. Cód...

0  Compruebe si la conexión a Internet está disponible a través de proxy  ( Check if internet connection is available through proxy ) 
Estoy tratando de verificar si la conexión a Internet está disponible en dispositivos Android, pero mi conexión a Internet requiere un proxy para llegar a Int...

0  Encabezado HTTP adicional que no funciona  ( Additional http header not working ) 
Estoy tratando de agregar encabezados a HTTP y abajo en mi código - URL url = new URL("http://localhost:8080/share/page"); HttpURLConnection conn = (HttpU...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos