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

Gracias zerokilled por la ayuda. Así que HttpOnly lo único que hace es impedir que el cookie pueda ser modificado mediante javascript pero éste se envia igual. Estaba confundido con esto.

Por otro lado, acabo de solucionarlo. La solución estaba en otro post que abrí hace un tiempo en este mismo subforo. Se trata del uso de Access-Control-Allow-Credentials. La otra vez que me lo explicaron, como no estaba usando cookies, no vi para que servía esta directiva y no le di la importancia que tenia. He encontrado una explicación en este enlace(Apartado "Credenciales y autenticación") que me ha dado las pistas necesarias para que me funcione.

Sin embargo no he acabado de entender el concepto. Por ejemplo se dice refiriendose a la opcion de configuración withCredentials cuando haces una petición ajax mediante jQuery:
Cita:
La marca withCredentials hace dos cosas: Si el servidor emite una cookie, el explorador puede aceptarla; si el explorador tiene una cookie, puede enviarla al servidor.
Esto es justamente lo que necesito, que pueda recibir una cookie del servidor y también poder enviarla. Pero no me ha hecho falta poner esa opción para que la cookie llegara. Luego dice para que sirve Access-Control-Allow-Credentials:
Cita:
El encabezado de respuesta Access-Control-Allow-Credentials hace dos cosas: si la respuesta tiene una cookie, el explorador puede aceptarla; y si el explorador envió una cookie con la solicitud, el cliente JavaScript puede recibir los resultados de la llamada.
Entonces, ¿poner esta cabecera a true no es lo mismo que lo de arriba? Yo he puesto Access-Control-Allow-Credentials a true y me ha funcionado sin tener que retocar la petición ajax.
Luego acaba diciendo:
Cita:
En otras palabras, si el cliente establece withCredentials, entonces el cliente solo recibirá una devolución de llamada con el acierto en JavaScript si el servidor permite credenciales (en la respuesta). Si se hubiera establecido withCredentials y el servidor no permitiera las credenciales, entonces el cliente no obtendría acceso a los resultados y se invocaría la devolución de llamada de error de cliente.
Es decir, si pones withCredentials pero el servidor no tiene Access-Control-Allow-Credentials: true entonces no funcionará. ¿Pero y en caso inverso? ¿si pones Access-Control-Allow-Credentials: true pero la petición ajax no tiene withCredentials: true que ocurrirá? Como he dicho, sin poner withCredentials a mi me funciona igualmente. Entonces no acabo de entender para qué sirve withCredentials.

Un saludo y gracias nuevamente. Ahora al menos ya puedo ir apañándome.
__________________
github.com/xgbuils | npm/xgbuils