Android + Login Web

bLero

Hola,

Tengo una aplicación para android que consume archivos JSON alojados en un servidor.

Para acceder a estos archivos, por ejemplo: http://www.url.com/user/3

que me devolvería un JSON con toda la información del usuario 3, debo estar logueado, pues sino, al introducir dicha url en el navegador me mostrará la página de login.

Tengo pensado entonces, hacer un post a la URL de login, con unos datos de login válidos desde android y almacenar estos datos (usuario y contraseña) en SharedPreferences para cuando se acabe la sesión que vuelva a intentar el login automáticamente.

Mi duda es, cómo detectar cuándo se me ha terminado la sesión para volver a hacer login.

Tengo varias opciones:

1 - Hacer login siempre antes de cada petición (hago una petición cada 30 segundos aprox)
2 - Examinar el encabezado de respuesta de la petición, si el content-type = html en vez de json entonces me mostrará la página de login y deberé hacer un POST de nuevo.
3 - Igual que el anterior pero examinando el cuerpo del mensaje.

¿Alguna otra idea? ¿Qué opción utilizaríais vosotros?

elkaoD

Error 403 Forbidden es la opción semánticamente correcta.

1 respuesta
sasher

¿Por qué no creas una cookie para el usuario logeado y compruebas si dicha cookie existe cuando se solicite ese JSON? La cookie le das el tiempo que quieras para que expire (o que expire al terminar la sesión) y ya está.

1 respuesta
bLero

#2 Eso sería lo ideal, pero la aplicación web no funciona así y no lo puedo cambiar.

El mecanismo actual es:

Solicito www.midominio.com/user/3 (con autentificación):

Result Code: 200 (OK), content-type: application/json ... archivo json ...

Solicito www.midominio.com/user/3 (sin autentificación):

Result Code: 200 (OK), content-type: application/xhtml ... formulario de login ...

#3 Sería otra buena opción, aunque el tema de fiarme de las cookies nunca me ha gustado mucho.

Por ejemplo si el tiempo de cookie de sesión es diferente al tiempo de sesión que me ofrece el servidor, por cualquier motivo, un reinicio del servidor, o que cambie el reloj del movil o lo que sea, ya que cascaría la aplicación al intentar parsear un html como un json.

Usuarios habituales

  • bLero
  • sasher
  • elkaoD