Android administración de sesiones

Hay una biblioteca específica para Android gestión de la sesión? Que necesito para gestionar mis sesiones en una aplicación Android. no en WebView. Puedo establecer el período de sesiones de mi método post. Pero cuando voy a enviar otra solicitud que la sesión se pierde. Alguien me puede ayudar con este asunto?

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("My url");

HttpResponse response = httpClient.execute(httppost);
List<Cookie> cookies = httpClient.getCookieStore().getCookies();

if (cookies.isEmpty()) {
    System.out.println("None");
} else {
    for (int i = 0; i < cookies.size(); i++) {
        System.out.println("- " + cookies.get(i).toString());
    }
}

Cuando intento acceder a la misma acogida que la sesión se pierde:

HttpGet httpGet = new HttpGet("my url 2");
HttpResponse response = httpClient.execute(httpGet);

Tengo la página de inicio de sesión de respuesta del cuerpo.

InformationsquelleAutor nala4ever | 2010-11-19

4 Kommentare

  1. 39

    Esto no tiene nada que ver con Android. Tiene todo que ver con Apache HttpClient, la biblioteca está utilizando para el acceso HTTP.

    Las cookies de sesión se almacenan en su DefaultHttpClient objeto. En lugar de crear un nuevo DefaultHttpClient para cada solicitud, se aferra a ella y usarla, y las cookies de sesión se mantendrá.

    Usted puede leer acerca de Apache HttpClient aquí y leer sobre la gestión de cookies en HttpClient aquí.

    • Muchas gracias.. voy a tratar de esa manera
    • Gracias CommonsWare, realmente resuelto mi problema. Muchas gracias..:)
    • Este enlace y dar idea de cómo implementar esta foo.jasonhudgins.com/2009/08/…
  2. 4

    Esto es lo que yo uso para los puestos. Puedo utilizar las nuevas httpClients con este método donde phpsessid es el PHP identificador de sesión extraído de la secuencia de comandos de inicio utilizando el código de arriba.

    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    
    nameValuePairs.add(new BasicNameValuePair("PHPSESSID",phpsessid));
    • Gracias por la info Jim
  3. 3

    Generalmente, en Java HttpURLConnection puede establecer /obtener una cookie de esta manera (aquí es todo el proceso de conexión). El código siguiente es mi ConnectingThread run(), de la que todas la conexión de clases de actividad de heredar. Todos comparten estática sCookie cadena que se envía todas las solicitudes. Por lo tanto, usted puede mantener un estado común, como se registra en on /off:

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();             
    
            //set cookie. sCookie is my static cookie string
            if(sCookie!=null && sCookie.length()>0){
                conn.setRequestProperty("Cookie", sCookie);                  
            }
    
            //Send data
            OutputStream os = conn.getOutputStream(); 
            os.write(mData.getBytes());
            os.flush();
            os.close(); 
    
            //Get the response!
            int httpResponseCode = conn.getResponseCode();         
            if (httpResponseCode != HttpURLConnection.HTTP_OK){
               throw new Exception("HTTP response code: "+httpResponseCode); 
            }
    
            //Get the data and pass them to the XML parser
            InputStream inputStream = conn.getInputStream();                
            Xml.parse(inputStream, Xml.Encoding.UTF_8, mSaxHandler);                
            inputStream.close();
    
            //Get the cookie
            String cookie = conn.getHeaderField("set-cookie");
            if(cookie!=null && cookie.length()>0){
                sCookie = cookie;              
            }
    
            /*   many cookies handling:                  
            String responseHeaderName = null;
            for (int i=1; (responseHeaderName = conn.getHeaderFieldKey(i))!=null; i++) {
                if (responseHeaderName.equals("Set-Cookie")) {                  
                String cookie = conn.getHeaderField(i);   
                }
            }*/                
    
            conn.disconnect();                
  4. 0

    Totalmente transparente para mantener una sesión activa (usuario registrado , o lo que sea) en aplicaciones de Android.
    Utiliza el apache DefaultHttpClient dentro de un Singleton y un HttpRequest/Respuesta de los Interceptores.

    La SessionKeeper clase simplemente comprueba si uno de los encabezados es Set-Cookie, y si lo hace, simplemente lo recuerda.
    El SessionAdder simplemente añade el identificador de sesión a la solicitud (si no es null).
    De esta manera, todo el proceso de autenticación es totalmente transparente.

    public class HTTPClients {
    
        private static DefaultHttpClient _defaultClient;
        private static String session_id;
        private static HTTPClients _me;
        private HTTPClients() {
    
        }
        public static DefaultHttpClient getDefaultHttpClient(){
            if ( _defaultClient == null ) {
                _defaultClient = new DefaultHttpClient();
                _me = new HTTPClients();
                _defaultClient.addResponseInterceptor(_me.new SessionKeeper());
                _defaultClient.addRequestInterceptor(_me.new SessionAdder());
            }
            return _defaultClient;
        }
    
        private class SessionAdder implements HttpRequestInterceptor {
    
            @Override
            public void process(HttpRequest request, HttpContext context)
                    throws HttpException, IOException {
                if ( session_id != null ) {
                    request.setHeader("Cookie", session_id);
                }
            }
    
        }
    
        private class SessionKeeper implements HttpResponseInterceptor {
    
            @Override
            public void process(HttpResponse response, HttpContext context)
                    throws HttpException, IOException {
                Header[] headers = response.getHeaders("Set-Cookie");
                if ( headers != null && headers.length == 1 ){
                    session_id = headers[0].getValue();
                }
            }
    
        }
    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea