Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/08/2014, 03:31
Pantaláimon
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
persistencia de sesión + cross-origin + ajax

Buenas.

Estoy realizando un proyecto que básicamente se trata de un servicio web RESTful y un conjunto de páginas que mediante AJAX hacen peticiones a este servicio. Cuando tomé el proyecto me lo encontré junto, y ahora finalmente me he decidido a separarlo en dos: por una parte el web service y por la otra la página web.

Centrándome en el problema, el api REST tiene estas 3 urls de interés:
Código code:
Ver original
  1. api/login    POST: [usuario, password], Devuelve true/false en función de si el login tiene éxito
  2. api/logged    GET:, Devuelve true/false en función de si está logueado o no.
Y añadí una de test que en producción eliminaré:
Código code:
Ver original
  1. api/login/get/{usuario}/{password}  GET: Hace lo mismo que api/login pero en GET

El web service está en la ruta: http://localhost:55121/
La página web cliente está en: http://localhost:49632/

Así que incluí, de momento, en la cabecera de las respuestas del web service la opción menos restrictiva Access-Control-Allow-Origin:* para permitir peticiones ajax desde la web cliente al web service. Esto me ahorró las quejas del navegador. Sin embargo observo que, ahora que el proyecto está dividido en dos, las variables de sesión no persisten. Cosa que me deja bastante descolocado. Pues, no logro entender la razón y no sé si es algo habitual que ocurra (pero que escapa a mis conocimientos)o se debe a algún error/despiste mío.

Lo del error/despiste, siempre puede ser pero cada vez he aislado más el problema y lo empiezo a dudar pues el comportamiento es el siguiente:

Si hago peticiones ajax desde la aplicación previa a la separación del proyecto en dos partes, funciona correctamente:
Código :
Ver original
  1. 1) api/login        POST(user,1234) -> devuelve true
  2. 2) api/logged        -> devuelve true
  3. 3) api/login/get/user/1234        -> devuelve true
  4. 4) api/logged        -> devuelve true

Una vez separado el proyecto en dos:
Si interactúo desde la web cliente (http://localhost:49632/) haciendo peticiones ajax al web service en este orden:
Código :
Ver original
  1. 1) http://localhost:55121/api/login        POST(user,1234) -> devuelve true
  2. 2) http://localhost:55121/api/logged        -> devuelve false (¡debería devolver true pues está logueado!)
  3. 3) http://localhost:55121/api/login/get/user/1234        -> devuelve true
  4. 4) http://localhost:55121/api/logged        -> devuelve false (¡debería devolver true pues está logueado!)

Si hago peticiones get al mismo web service (http://localhost:55121/):
Código :
Ver original
  1. 1) http://localhost:55121/api/login/get/user/1234        -> devuelve true
  2. 2) http://localhost:55121/api/logged        -> devuelve true (esto me demuestra que el web service separado funciona bien,
  3. el problema debe estar en la interacción entre web cliente y web service).

Comparando las dos maneras de interactuar. Las diferencias que veo es que en la que no funciona interactúo usando ajax y haciendo una petición cross-origin. De ahí deduzco que puede que el problema esté en una de esas dos cosas. Si no va por ahí la cosa ya se me ocurrirá qué otro problema puede ser. Pero de momento dejo la pregunta en el aire a la falta de otras ocurrencias.

Un saludo y gracias!

PD.: Poner esta duda en el foro de javascript está un poco cogido con pinzas. No sabía donde ponerlo. Pero, como aparecía la palabra AJAX y sé que por aquí hay foreros con conocimientos en el mundillo web, me he decantado por ponerlo aquí.
__________________
github.com/xgbuils | npm/xgbuils