MANTENER SESION ABIERTA EN PHP.

Iniciado por podenko, 14 Febrero 2014, 19:17 PM

0 Miembros y 2 Visitantes están viendo este tema.

podenko

Hola a todos, mi nombre es Pedro, soy nuevo en el foro. Estoy involucrado en un proyecto y tengo un problema que me viene de cabeza.

Tengo un PC (PC1) conectado a una red de sensores. Este PC recibe de la red de sensores mensajes cada cierto tiempo. El programa que recibe la información de esos sensores esta escrito en C.

Por otra parte tengo un servidor Apache montado sobre otro PC(PC2), al cual se conectarán los clientes para visualizar los datos.

Una vez el PC1 reciba datos de los sensores, debe de enviarlos mediante XML al servidor Apache en el PC2 mediante una conexion HTTPS. Esto se puede realizar mediante POST.

Hasta aquí os preguntareis, y cual es el problema?. Pues el problema es que quiero mantener la sesion abierta, es decir, una vez el PC2 autentifica al PC1, todos los mensajes XML que mande el PC1 al PC2 debe de enviárselo por el mismo canal, ya que si no habría que volverse a autenticar. Por explicarlo de otra manera, una vez el PC1 manda la contraseña al PC2, si esta es correcta, el PC2 debería de crear una conexión HTTPS en un puerto específico del PC1 y mantenerla, así sabríamos que ese camino es seguro para los datos.

La forma más segura de hacerlo me imagino que es mediante sockets, más concretamente sockets ssl,tls. Ha alguien que haya trabajado alguna vez con ellos y me sepa explicar algún ejemplo de como realizar esto?

Otra opción también podría ser usar cURL, y mandar una cookie que identifique al cliente(PC1) cada vez que se le envíen datos al servidor(PC2). Aunque esto, como os podéis imaginar no es tan eficiente ya que estaríamos abriendo una conexión cada vez que queramos enviar datos.

Si alguien puede darme información sobre el tema y tiene experiencia le estaría muy agradecido.


un saludo a todos ;-) ;-) ;-)

~ Yoya ~

El protocolo HTTP/s es stateless, ósea que cada request es tomada como nueva.

Otra solución seria utilizar WebSockets que es la solución que buscas.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

podenko

Gracias por tu respuesta.
La verdad es que ahora estoy probando a realizar el trabajo con la ayuda de una amada herramienta llamada cURL. Por lo que he leído, te permite guardar las sesiones en memoria, a sí que me imagino que si realizará dos POST seguidos al mismo sitio web, conseguiría que se reutilizase el  canal.

Alguno tiene experiencia utilizando esta herramienta, me podría ser de gran ayuda.

Gracias de antemano.

~ Yoya ~

Recuerda que Curl es una herramienta no un protocolo y por lo tanto esta limitado a las funcionalidades que ofrece el protocolo.

Cita de: podenko en 17 Febrero 2014, 16:15 PM
a sí que me imagino que si realizará dos POST seguidos al mismo sitio web, conseguiría que se reutilizase el  canal.

Incorrecto, el pudiera guardar la cookie de session u cualquier otra y reutilizarla en las próxima request, así evitaria dar pasos previos que ya ha dado como por ejemplo loguearse. Pero con cada request, se abre un canal nuevo (porque así esta diseñado el protocolo). Deberías leerte las especificaciones del protocolo HTTP, seria de gran ayuda.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

podenko

Ok me queda claro.
Aunque en la especificación de cURL pone que ciertos datos son guardados en una cache para mantener las conexiones persistentes, quizás no lo haya entendido bien.

A la hora de utilizar websockets. He conseguido una librería para poder implementarlo directamente desde un programa en C. Me gustaría saber más de esto, por que ahora lo desconozco aunque me dispongo a leer la documentación.

Ya que veo que controlas sobre el tema, ¿sería difícil abrir un canal de comunicación seguro desde un programa en C hasta uno en PHP situado en otra máquina?

Gracias por tu respuesta un saludo.

~ Yoya ~

La dificultad depende de los conocimientos y experiencia.

Te recomiendo que en esta etapa no te dificultes tanto las cosas y mucho menos con tecnologias con la cual quizas no hayas trabajado como pudiera ser WebSockets. Haz todo como lo sabes hacer aunque no sea tan eficiente y luego vas mejorando el performance ya sea implementando WebSockets u otra tecnologia.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

podenko

Hola Yoya.
Finalmente me he aventurado a utilizar websockets, principalmente por que es la tecnología que se utiliza para este tipo de sistemas en estos días. Como ingeniero recién salido de mi facultad, no cuento con mucha experiencia pero creo que es el momento para adquirirla.

Volviendo a mi proyecto, ahora lo explicaré mejor. Tengo una Raspberry Pi (corre en Linux), conectada a un modulo de radiofrecuencia. El programa con el que me llegan los datos del módulo de radiofrecuencia esta escrito en C básico.

Mi idea era la siguiente:

1. La Raspberry Pi debe de conectarse mediante un websocket a un servidor situado en otra máquina.

2.- Los clientes, se conectaran al Servidor y este mostrara los mensajes recibidos desde la Raspberry Pi.

Por lo tanto quiero implementar un Servidor websocket en un PC(windows) y un cliente websocket en mi Raspberry(linux).

Por lo que he mirado en la web, se puede hacer de muchas maneras, yo e pensado en dos:
1.-Hacer el cliente websocket desde C, pero veo que es muy complicado manejar las librerias de websockets desde C.
2.-Otra posibilidad séria mandar los mensajes desde C hasta otro programa mediante un socket interno y luego manejar el cliente websocket desde un lenguaje más asequible.

¿Cual pensáis que es la opción más asequible?.
Si os interesa el proyecto os lo podría explicar mejor porque ya hice unas cuantas cosas antes. El fin del mismo es diseñar un protocolo para el control de acceso a instalaciones.

Gracias ;-) ;-)

~ Yoya ~

Cita de: podenko en 18 Febrero 2014, 12:28 PM
2.-Otra posibilidad séria mandar los mensajes desde C hasta otro programa mediante un socket interno y luego manejar el cliente websocket desde un lenguaje más asequible.

Y porque no simplemente busca una forma de implementar directamente el cliente WebSocket con un lenguaje mas asequible, como por ejemplo Python??

Saludos y buena suelte en el proyecto, estoy seguro que ya pronto lo terminaras.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.