Siempre se da la ocasión
que necesitas crear una sesión en una aplicación y al mismo tiempo tiene que
crearse una sesión para el mismo usuario en otro sistema en otro dominio, porque
de alguna manera comparten datos o cosas por el estilo.
Para hacer esto podemos
hacer uso de http://enable-cors.org/ que permite comunicación entre dos
dominios distintos. Otra forma de hacer esto es usando JSONP , que no es mas que un simple truco para
superar las restricciones de "same domain policy" en peticiones Ajax.
Pero hoy quiero hablar de
tratar de crear una sesión desde PHP usando Curl , Curl nos permite hacer peticiones a una URL
desde PHP y recibir los datos en el mismo script. Lo lógico de pensar es que si puedo hacer una petición desde PHP y
enviar parámetros en la petición, entonces puedo enviar las credenciales del
usuario al mismo tiempo para crear la sesión en 2 sistemas distintos.
Bueno en teoría si
funciona, el script al que hagas la petición desde PHP recibirá los datos y responderá
como se espera pero lo que no funciona es al momento de crear la sesión. Si
tratas de crear la sesión usando JSONP enviando los datos en la query string
funcionara perfectamente pero con Curl no funcionara.
El problema es con la identificación
de la sesión, normalmente cuando tu inicias una sesión con PHP se crea un
identificador único el cual luego es pasado a nuestro navegador en forma de
cookie ó GET , ese identificador es guardado en el servidor y la próxima
vez que un script llama a "session_start()" PHP verifica
ese identificador en el servidor, si lo encuentra entonces hay una sesión
creada. En caso de no encontrar el identificador de la sesión PHP creara uno
nuevo.
Entonces la petición Curl
no puede recibir el identificador de la sesión que se creo en PHP , por lo
tanto cuando visitas el sitio B no existe el identificador en el servidor
para tu navegador. Este comportamiento no pasa con JSONP.
Puedes hacer pruebas usando
las funciones session_name() , session_id() de PHP y podrás comprobar que los
identificadores de las sesión no son los mismos usando Curl en el sitio A y B.
He leído en algunas paginas
que puedes pasar el identificador se sesion del sitio A al B en los parámetros para usar
el mismo ID, pero no lo he llegado a comprobar no tengo idea de como hacerlo. No soy un experto en PHP si me
he equivocado por favor corríjanme para poder aprender también.
He escrito esta
entrada por si alguna persona también tuvo
la idea como yo de usar Curl para crear sesiones y no tiene idea de por que no
funciona.
No hay comentarios:
Publicar un comentario