2011-04-17 30 views
8

Hola chicos, tengo algunas preguntas sobre la implementación de una función de inicio de sesión en Android.Android HTTP preguntas de inicio de sesión

1. Does android have anything like sessions or cookies? ¿Cómo debo 'recordar' que el usuario está registrado? ¡Obviamente no quiero pedir la contraseña cada vez que se usa mi aplicación!

2. Should I hash the password before sending it to the server? Tengo una tabla en mi base de datos con una columna de usuario y contraseña. Cuando quiero verificar el inicio de sesión, ¿debo enviar la contraseña codificada al servidor como login.php?u=sled&p=34819d7beeabb9260a5c854bc85b3e44, o simplemente texto sin formato como login.php?u=sled&p=mypassword y hash it en el servidor antes de realizar la autenticación?

Respuesta

10

¿Tiene Android algo como sesiones o cookies?

Sí. Hay dos alternativas.

Opción # 1:

Usted puede utilizar CookieManager para establecer su cookie.

Opción # 2:

La otra alternativa (estoy usando esta alternativa en una de mis aplicaciones) es agarrar la cookie después de que haya enviado su nombre de usuario y contraseña para el servidor (por ejemplo, a través de HttpPost o HttpGet). En su pregunta, está utilizando el estilo $_GET de su autenticación de inicio de sesión, por lo que mi código de muestra utilizará HttpGet.

Código de la muestra usando HttpGet:

HttpParams httpParams = new BasicHttpParams(); 

// It's always good to set how long they should try to connect. In this 
// this example, five seconds. 
HttpConnectionParams.setConnectionTimeout(httpParams, 5000); 
HttpConnectionParams.setSoTimeout(httpParams, 5000); 

DefaultHttpClient postClient = new DefaultHttpClient(httpParams);   
// Your url using $_GET style. 
final String url = "www.yourwebsite.com/login.php?u=myusername&p=mypassword"; 
HttpGet httpGet = new HttpGet(url); 
HttpResponse response; 

try { 
    // Execute your HttpGet against the server and catch the response to our 
    // HttpResponse. 
    response = postClient.execute(httpGet); 

    // Check if everything went well. 
    if(response.getStatusLine().getStatusCode() == 200) { 
     // If so, grab the entity.   
     HttpEntity entity = response.getEntity(); 

     // If entity isn't null, grab the CookieStore from the response. 
     if (entity != null) { 
      CookieStore cookies = postClient.getCookieStore(); 
      // Do some more stuff, this should probably be a method where you're 
      // returning the CookieStore.  
     }     
    } 

} catch (Exception e) { 
} 

Ahora, cuando usted tiene su CookieStore; obtenga una lista de cookies y luego puede usar Cookie para determinar el nombre, dominio, valor, etc ...

La próxima vez que intente acceder al contenido "bloqueado" de su sitio web; establecer una cookie a su HttpURLConnection de su información Cookie:

URL url = new URL("www.yourwebsite.com/lockedcontent.php"); 

HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); 

httpURLConnection.setInstanceFollowRedirects(false); 
// "Host" and "Cookie" are fields in the HTTP response. Use WireShark 
// via your computer to determine correct header names. 
httpURLConnection.setRequestProperty("Host", domainOfYourCookie); 
httpURLConnection.setRequestProperty("Cookie", valueOfYourCookie); 

final int responseCode = httpURLConnection.getResponseCode(); 

// And get the content... 

¿Debo hash de la contraseña antes de enviarla al servidor?

Depende de cómo esté diseñado su sistema. Debe tener información correcta cuando la envía a su servidor. Esto también depende de cómo has hashing tu información en tu archivo .php.

¿Cómo debo 'recordar' que el usuario está registrado?

Almacenar la información en un SharedPreferences o algo así. Como dije antes, puede usar el hash si su sistema de inicio de sesión está correctamente diseñado, esto depende de cómo lo esté mezclando en su archivo .php.

Cuestiones relacionadas