PHP - Manejo avanzado de multiples sesiones con PHP

 
Vista:

Manejo avanzado de multiples sesiones con PHP

Publicado por Daniel (7 intervenciones) el 21/02/2010 21:59:33
Hola, he estado revisando y buscando muchos artículos relacionados con el tema y la verdad es que no he conseguido información que se pueda decir AVANZADA (bueno eso por lo que he visto) con respecto a este tema.

La idea de abrir esta consulta es para dejar y pedir la mayor cantidad de información AVANZADA (o lo que conozcan siempre y cuando no sea lo básico ej: como iniciar sesión, establecer variables de sesión, y cosas por el estilo que si se consiguen mucho en la web) relacionada con este tema. MAS ADELANTE SI CONSIGO UNA BUENA AYUDA DE USTEDES Y TENIENDO ALGO DE TIEMPO LIBRE, PUEDO "SOLTAR" UN EJEMPLO EN ESTE POST DE COMO TRABAJA DICHA SESIÓN (INTEGRANDO AJAX, PHP, XML, POO y MVC EN EL MANEJO DE LA SESIÓN).

¿Que es lo que estoy haciendo con el manejo de sesiones y que ideas tengo?

Bueno estoy usando la POO (Programación Orientada a Objetos) y el patrón MVC (Modelo Vista Controlador) en PHP, el proceso de login lo hago a través de una petición AJAX (el mecanismo de como se integra AJAX con la POO y el patron MVC no lo voy a explicar, los que han manejado el tema sabrán mas o menos como es el proceso).

Estoy tratando de evitar el uso de las cookies (debido a que el usuario puede hacer lo que se le de la gana con las cookies "desactivarlas, eliminarlas..." y demás), tampoco quiero usar una base de datos ¿entonces que nos queda? bueno tenemos a la belleza de XML que se podría usar para por ejemplo almacenar el ID de todas las sesiones (el archivo XML se guarda en el servidor), por los momentos no he visto la necesidad de guardar nada en el PC del usuario/cliente.

¿En que me puede ayudar?

En este tema (manejo de múltiples sesiones) no tengo mucha experiencia, pero si tengo experiencia aplicando las tecnologías y conceptos antes mencionados (AJAX, PHP, POO, MVC, XML). Entonces lo que me puede servir para armar este proceso avanzado de sesiones es un paso a paso (LO MAS COMPLETO POSIBLE) de como seria el control que se le tiene que dar a las sesiones DESDE EL INICIO HASTA EL FIN tomando en cuenta cualquier bifurcación que pueda existir. Técnicas que utilizas para manejar las sesiones múltiples, etc...

Suena como tedioso no, pues lo es :). Pido por favor que el que me valla a responder organice las ideas y que plasme este paso a paso o ciclo para el control de MÚLTIPLES SESIONES.

Obviamente también acepto cualquier sugerencia, critica...

Saludos,

Espero que con ayuda de ustedes podamos armar un buen tema que nos beneficie a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Manejo avanzado de multiples sesiones con PHP

Publicado por Diego Romero (1450 intervenciones) el 21/02/2010 23:53:21
Pues el id de sesión de PHP se guarda en el cliente, con una cookie, de eso no te puedes librar.

De todas formas no sé a qué le llamas "información avanzada" sobre sesiones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejo avanzado de multiples sesiones con PHP

Publicado por Daniel (7 intervenciones) el 22/02/2010 01:31:53
Hola Diego,

Bueno información avanzada seria lo mismo que decir "cuales son las mejores practicas para manejar sesiones de forma segura", ejemplo: El evitar pasar el id de la sesión a otras paginas usando como medio el URL de las mismas, esto debido a que puede robarse fácilmente la sesión y cosas por el estilo (bueno eso es lo que he leído).

De todos modos estaría agradecido si me puedieras dar una breve explicación de como seria un ciclo de "ejecución" para las sesiones múltiples (claro esto según tus conocimientos en el tema), no tiene que ser una tesis doctoral. La idea es que compartas lo que puedas y si necesitas alguna ayuda/consulta x pues me dices (digo esto porque yo se que aveces me pongo como muy exigente xD). Para eso estamos acá :)

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejo avanzado de multiples sesiones con PHP

Publicado por Diego Romero (1450 intervenciones) el 22/02/2010 05:23:55
La respuesta a tu planteamiento dependerá de para qué quieres usar sesiones. Y tampoco entiendo a qué le llamas "sesiones múltiples".

Una vez que aprendes el concepto de sesiones en PHP usarlas resulta muy sencillo. Se trata de crear un espacio de memoria que solo es accesible al cliente para el cual se crea ese espacio, o bien, solo tiene ámbito para un cliente en particular.

El resto son detalles. Por ejemplo, quizá te interesaría saber (y por tanto saber cómo modificar) el tiempo de vida de una sesión. Quizá ese detalle para ti es "información avanzada".
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejo avanzado de multiples sesiones con PHP

Publicado por Daniel (7 intervenciones) el 22/02/2010 14:19:00
Bueno mira, por los momentos quiero usar las sesiones para manejar el ingreso de varios usuarios simultáneamente a x sitio web (osea que varios usuario puedan iniciar y tener su propia sesión activa al mismo tiempo) y a eso me refiero con "sesiones múltiples".

Con respecto a lo que mencionas de que "una vez que aprendes el concepto de sesiones en PHP usarlas resulta muy sencillo" pues precisamente esa es una de las razones por la cual abrí esta consulta. Yo entiendo el funcionamiento básico de las sesiones ej: como hacer un carrito de compras (iniciar, establecer variables de sesión, destruir una sesión, manipular los datos de esa sesión...) CLARO esto teniendo en cuenta que 1 solo usuario es el que va y puede acceder al sitio/carrito.

Cosas como esta que mencionas "quizá te interesaría saber (y por tanto saber cómo modificar) el tiempo de vida de una sesión", son precisamente estas técnicas o detalles que me interesa conocer (o por lo menos saber que se pueden realizar). Pienso que es suficiente con que se mencionen detalles como esos (ya lo demás es cuestión de googlear un rato).

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejo avanzado de multiples sesiones con PHP

Publicado por Diego Romero (1450 intervenciones) el 23/02/2010 04:22:22
Si sabes manejar una sesión para un usuario, ya sabes cómo hacerlo para muchos porque lo que tú llamas "sesiones múltiples" es totalmente transparente para el programador, de eso se encarga internamente PHP, no tienes que hacer nada en especial.

Para que lo veas más claro, haz una página que use sesiones y carga esa página en dos navegadores diferentes (digamos FireFox y Opera) para que no se interfieran con las cookies. Si tienes Apache como servidor, ve al directorio de temporales de tu sistema operativo (C:\Windows\Temp en el caso de Windows) y verás al menos dos archivos que comienzan con la palabra "sess_" seguido de una cadena aleatoria y sin extensión. Esos archivos guardan las variables de sesión con sus valores y tipos. La cadena aleatoria es el ID de sesión que se crea automáticamente y se corresponde con el valor de la cookie que la función session_start() envia al navegador cuando es llamada. Esto último lo puedes corroborar listando las cookies que el navegador tiene almacenadas bajo el mismo dominio desde donde le abriste la sesión.

El proceso va más o menos así:

Se ejecuta session_start().
session_start() pide al navegador que le devuelva la cookie PHPSESSID para el dominio actual (localhost si estás en tu propia máquina).
Si el navegador tiene la cookie en cuestión session_start() lee su valor, que es una cadena aleatoria, y lee el archivo sess_<cadena aleatoria> y crea el array $_SESSION con cada uno de esos valores.
Si el navegador no tiene la cookie session_start() crea una cadena aleatoria y le envía al navegador una cookie con ese valor y crea $_SESSION vacío.

La sesión dura hasta que ocurren una de dos cosas:
El visitante cierra su navegador (y me refiero a cerrarlo completamente, no solo la ventana donde tiene cargada la página de tu sitio). Esto si PHP está configurado con sus opciones por omisión. O bien.
Llamas por código a session_destroy().

Lo primero ocurre porque la cookie que guarda el ID de sesión (PHPSESSID) está configurada para borrarse una vez que se cierra el navegador. Pero puedes modificar este comportamiento de dos maneras. Una es modificando el php.ini, en la entrada session.cookie_lifetime donde le puedes indicar cuánto debe durar la sesión en segundos. Si modificas ese valor, digamos a 30 segundos, entonces la sesión expira (se destruye) pasados 30 segundos de inactividad, es decir, deben pasar 30 segundos desde la última llamada a session_start() para que se destruya la sesión.
La otra manera es usando la función ini_set() para modificar dinámicamente el php.ini (aunque esto solo afecta al script en curso, no cambia físicamente el php.ini y por lo tanto el resto de los scripts no se ven afectados, no todos los servidores de producción permiten el uso de esta función).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejo avanzado de multiples sesiones con PHP

Publicado por Daniel (7 intervenciones) el 23/02/2010 15:35:07
Perfecto Diego, GRACIAS por dedicarme un poco de tu tiempo.

Con respecto al primer párrafo: si he estado trabajando en esto de las sesiones y precisamente ayer hice las pruebas con navegadores diferentes y me di cuenta de que me estaba "matando la cabeza" sin necesidad :S.

Gracias de nuevo por esa explicación, me has ayudado ha aclarar muchas cosas con respecto al manejo de sesión. Y obviamente esta nota le puede servir a mas de uno.

Pregunta: ¿Esas interacciones que mencionas entre session_start(), las cookies y los archivos tmp se realzan automáticamente? (osea sin necesidad de que uno "registre" las cookies en el lado del cliente, ¿esas cookies que mencionas seria como algo interno entre PHP(sesion_start() y $_SESSION) el navegador y el servidor web?).

Pregunta: ¿Que finalidad puede tener el almacenar el id de una sesión (junto con algún identificador del usuario) en una base de datos?. ¿Que podría hacer con esto?, ¿Es seguro guardar el id de la sesión en algún lado del servidor o en una base de datos?.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejo avanzado de multiples sesiones con PHP

Publicado por Daniel (7 intervenciones) el 23/02/2010 17:20:52
Estuve revisando y ya le encontré la respuesta a la primera pregunta que hice (es un proceso interno/automático de PHP).

Con respecto a la segunda pregunta (que yo mismo hice :) ), "echando cabeza" si guardo el id de la sesión y nickname del usuario (ej: en un archivo xml.) puedo evitar de que el mismo usuario inicie su sesión (ingresando login y password) en diferentes navegadores/ordenadores y también puedo evitar de que otra persona (ej: un hacker) entre a la sesión del usuario (ya sea porque robo el login y password o el id de la sesión) mientras que el usuario este activo o logeado en el sitio (Este "bloqueo" se establecería a nivel de código. Si el hacker robo el id de la sesión no podría ingresar al sitio con la información (login, password...) de ese usuario y en el momento en que el usuario cierra sesión pues tanto la sesión como el id y cualquier información ligada a la sesión se "desvanece").

Claro el detalle de guardar el id de la sesión y x información en un archivo XML (en el servidor) es que habría que proteger muy bien ese archivo. Y realizar las funciones necesarias para actualizar constantemente ese archivo de acuerdo a lo que haga el usuario (ej: si el usuario cierra sesión pues se elimina esa etiqueta del XML. Si la sesion/cookie expira también abría que eliminar la etiqueta) a través de los llamados cron.

No se si sera necesario esto que estoy planteando (puede que exista una forma mas fácil de hacer lo mismo, aunque esto que planteo no es nada del otro mundo) o si de verdad se puede bloquear algo la entrada de hackers a través de las sesiones (a través de las ids de sesiones, porque si el hacker logra robar el login y password de un usuario pues ni modo hay no veo que se pueda hacer algo "a nivel de codigo").
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejo avanzado de multiples sesiones con PHP

Publicado por Diego Romero (1450 intervenciones) el 23/02/2010 20:15:55
Creo que la analogía más cercana a la combinación usuario/contraseña es una puerta y su llave. La puerta solo discrimina la llave, no quien usa esa llave. De igual manera el servidor solo determina que una contraseña pertenece a un usuario, no puede determinar (no hay forma de determinar) que quien tecleó la contraseña es el legítimo dueño (hay otros métodos, como el reconocimiento biométrico pero aún no está tan extendido como para usarlo en una web, no todo el mundo tiene un escaner de huellas dactilares, pero todo el mundo tiene un teclado).

Pero no te pongas tan paranoico. Las organizaciones que más saben de seguridad informática a través de Internet son los bancos y hasta ellos son hackeados de vez en cuando. Si crees que puedes hacer un sitio "fool-proof, rock solid, one hundred per cent secure against hackers" you are deluding yourself!. Y si crees haberlo logrado harías un buen negocio vendiéndole tu idea a los bancos :D.

Efectivamente, como te había dicho ya, el mecanismo de sesiones en PHP es transparente al programador. Tú solo llamas a session_start() y del resto se encarga PHP internamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Manejo avanzado de multiples sesiones con PHP

Publicado por Esteban (1 intervención) el 20/08/2014 15:02:21
Es una pena que un articulo con este titulo en la web "PHP - Manejo avanzado de multiples sesionna "
termine siendo un explicacion básica de sessiones por una persona que vio Poo y mvc y quedo deslumbrado...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar