jueves, 23 de enero de 2014

Crear una sesion en 2 dominos distintos con PHP y Curl no es posible (creo)


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.



http://saulburgos.com/books/googlemaps.html



No hay comentarios:

Publicar un comentario