Foros del Web » Programando para Internet » PHP »

Condicionar Sesiones en PHP

Estas en el tema de Condicionar Sesiones en PHP en el foro de PHP en Foros del Web. Hola de nuevo ! Disculpen tengo una hyper-mega-super-druper duda: ¿Cómo se le debe hacer para que una Sesión no pueda ser iniciada si ya lo ...
  #1 (permalink)  
Antiguo 01/07/2011, 14:16
 
Fecha de Ingreso: octubre-2008
Mensajes: 147
Antigüedad: 16 años, 1 mes
Puntos: 3
Pregunta Condicionar Sesiones en PHP

Hola de nuevo !

Disculpen tengo una hyper-mega-super-druper duda:

¿Cómo se le debe hacer para que una Sesión no pueda ser iniciada si ya lo hicieron desde otro ordenador o navegador web?

Es decir, en mi sitio web tengo un sistema para iniciar login con usuario y contraseña, pero pues lo que quiero hacer es evitar que puedan iniciar sesión con los mismos datos en diferentes ordenadores o navegadores simultáneamente...

Y básicamente quisiera una guía o instrucciones para lograr que:

1.- Si la sesión ya fue iniciada bajo el mismo nombre de usuario entonces me mande a una pagina de error; "ERROR: No se pudo iniciar sesión porque el usuario especificado ya cuenta con una sesión activa..."

2.- Si alguien después de haber iniciado sesión cerró su navegador, o simplemente ha estado inactivo por más de 5 minutos, entonces que PHP me cierre la sesión.


Alguien me podría ayudar a saber como se hace?

De antemano gracias por la ayuda o comentarios.
  #2 (permalink)  
Antiguo 01/07/2011, 14:30
Avatar de blakmetall  
Fecha de Ingreso: diciembre-2010
Ubicación: Jalisco
Mensajes: 181
Antigüedad: 13 años, 11 meses
Puntos: 18
Respuesta: Condicionar Sesiones en PHP

Cita:
Iniciado por dfmex Ver Mensaje
Hola de nuevo !

Disculpen tengo una hyper-mega-super-druper duda:

¿Cómo se le debe hacer para que una Sesión no pueda ser iniciada si ya lo hicieron desde otro ordenador o navegador web?

Es decir, en mi sitio web tengo un sistema para iniciar login con usuario y contraseña, pero pues lo que quiero hacer es evitar que puedan iniciar sesión con los mismos datos en diferentes ordenadores o navegadores simultáneamente...

Y básicamente quisiera una guía o instrucciones para lograr que:

1.- Si la sesión ya fue iniciada bajo el mismo nombre de usuario entonces me mande a una pagina de error; "ERROR: No se pudo iniciar sesión porque el usuario especificado ya cuenta con una sesión activa..."

2.- Si alguien después de haber iniciado sesión cerró su navegador, o simplemente ha estado inactivo por más de 5 minutos, entonces que PHP me cierre la sesión.


Alguien me podría ayudar a saber como se hace?

De antemano gracias por la ayuda o comentarios.
ya que estas preguntando aprovechando me gustaria añadir el punto 3.

3.- Si la sesion ya fue iniciada bajo el mismo nombre de usuario loggear en la pc
donde se esta iniciando sesion y desloggear a la otra pc. en caso de que deje
abierta la sesion y no han pasado los 5 minutos ( punto 2).
  #3 (permalink)  
Antiguo 01/07/2011, 14:32
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años, 6 meses
Puntos: 322
Respuesta: Condicionar Sesiones en PHP

Se me ocurre que guardes en MySQL la hora del inicio de sesión, cada que se visite a X página, el inicio de sesión se actualice a la hora actual y a la vez cheque si el último inicio menos la hora actual es mayor a 5 minutos, si es así, terminas dicha sesión

Ahora, en el formulario para iniciar sesión checas si el último inicio menos la hora actual es mayor a 5 minutos, si es así autorizas la sesión y listo.

Eso se me ocurre, saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #4 (permalink)  
Antiguo 01/07/2011, 14:34
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 14 años, 1 mes
Puntos: 511
Respuesta: Condicionar Sesiones en PHP

Hola que tal dfmex.

La forma lógica más fácil de hacer lo que quieres, es tener un sistema de registro de sesiones en la cual vas guardando los usuarios que se encuentran logeados en ese momento (inicio y cierre de sesión) y por medio de esa tabla puedes crear tus condicionales sin ningún problema

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #5 (permalink)  
Antiguo 01/07/2011, 14:37
Avatar de blakmetall  
Fecha de Ingreso: diciembre-2010
Ubicación: Jalisco
Mensajes: 181
Antigüedad: 13 años, 11 meses
Puntos: 18
Respuesta: Condicionar Sesiones en PHP

Cita:
Iniciado por skiper0125 Ver Mensaje
Hola que tal dfmex.

La forma lógica más fácil de hacer lo que quieres, es tener un sistema de registro de sesiones en la cual vas guardando los usuarios que se encuentran logeados en ese momento (inicio y cierre de sesión) y por medio de esa tabla puedes crear tus condicionales sin ningún problema

Saludos
Esa es una buena idea skiper.

ya la has usado tu, nos podrias comentar sobre que campos podriamos tener en la tabla para el control de las sesiones?
  #6 (permalink)  
Antiguo 01/07/2011, 14:56
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 14 años, 1 mes
Puntos: 511
Respuesta: Condicionar Sesiones en PHP

Cita:
Iniciado por blakmetall Ver Mensaje
Esa es una buena idea skiper.

ya la has usado tu, nos podrias comentar sobre que campos podriamos tener en la tabla para el control de las sesiones?
Claro que si la eh utilizado mucho. La tabla se complementará de la siguiente forma.

id -> int auto_increment (para llevar un historial)
usuario ->
fecha ->
hora inicio ->
hora cierre ->

Prácticamente serian los campos principales y con eso podrías crear tus procesos


Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #7 (permalink)  
Antiguo 01/07/2011, 15:35
 
Fecha de Ingreso: octubre-2008
Mensajes: 147
Antigüedad: 16 años, 1 mes
Puntos: 3
Pregunta Respuesta: Condicionar Sesiones en PHP

Ok, he controlado ya el tiempo, mi tabla en la base de datos la tengo asi:

Nombre de la Tabla: Login

Campos: LoginID, LoginUser, LoginClave, LoginIP, LoginLastTime, LoginAct

En el campo 1 tengo lo siguiente (he añadido un usuario para ejemplificar):

LoginID: 1
LoginUser: prueba
LoginClave: test
LoginIP: 192.168.1.75
LoginLastTime: 2011-07-01 15:56:53
LoginAct: 0

Muy bien, ahora, cuando solicito que se verifique si un usuario está activo o no lo que hago es decirle a PHP que por medio de una consulta a la base de datos verifique si LoginAct = 0 (no activo), 1 (activo)

Entonces, si LoginAct = 1 (activo) le pido a PHP que me verifique el tiempo entre el inicio de la sesión y el tiempo actual asi:

Código PHP:
$actual date("Y-m-d h:i:s");


$Comando "SELECT TIME_TO_SEC( TIMEDIFF( '".$actual."', '".$LoginLastTime."' ) ) as minutos";
$Mostrar mysql_query($Comando$db) or die(mysql_error());
$Minutos mysql_fetch_assoc($Mostrar);

// Si han pasado más de 1800 segundos (30 minutos) cerrar sesión actual e iniciar una nueva.

if($Minutos 1800){  }

//De lo contrario

else {exit('Error: Este usuario ya cuenta con una sesión activa');} 

Bueno, hasta aquí ya controlo que no se pueda iniciar sesión en 2 navegadores o 2 ordenadores distintos simultaneamente, ahora el paso es:

1.- Si ya inicie sesión, actualizar el tiempo en la tabla, en el campo LoginLastTime con date("Y-m-d h:i:s"); cada 10 minutos.


Si han pasado 10 minutos desde mi último movimiento de actividad en la web se ejecuta una alerta CSS que me dice que haga click en "Sigo aquí" para no cerrar mi sesión, si no aprieto "¡Hey, SIGO AQUI!" en 1 minuto despues de lanzada la alerta entonces por medio de un javascript ejecutará un Ajax que me cerrará la sesión y de lo contrario que actualice el LastLoginTime (en caso de haber apretado el boton).


Mi duda existencial sigue siendo esta:

Supongamos que inicié sesión ahorita, y cerre mi navegador, y despues voy a un internet publico, o el de mi prima, etc, e inicio sesión ahi y tambien cierro el navegador sin cerrar sesión.


Entonces llego a mi casa y como nunca cerre mi sesión asi hayan pasado 5 dias no me pedirá login la web, y entonces tenemos que de esta forma mi prima y yo estaremos en el mismo login sin problemas

¿Cómo podría evitar esa parte?
  #8 (permalink)  
Antiguo 01/07/2011, 15:50
Avatar de quike88  
Fecha de Ingreso: agosto-2008
Mensajes: 471
Antigüedad: 16 años, 3 meses
Puntos: 87
Respuesta: Condicionar Sesiones en PHP

Lo que se hace en estos casos, como dijo sourcegeek es actualizar la fecha de (en tu caso) LoginLastTime cada vez que visitas una página.

Si intentas loguearte desde otro lado, verificas que si pasaron mas de 5 minutos desde la ultima actualización de la fecha, y si es así, te puedes loguear, si no, pues no.

Y así no importa que cierres tu navegador sin cerrar tu sesión.

Saludos
  #9 (permalink)  
Antiguo 01/07/2011, 16:08
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 14 años, 1 mes
Puntos: 511
Respuesta: Condicionar Sesiones en PHP

Cita:
Iniciado por quike88 Ver Mensaje
Lo que se hace en estos casos, como dijo sourcegeek es actualizar la fecha de (en tu caso) LoginLastTime cada vez que visitas una página.

Si intentas loguearte desde otro lado, verificas que si pasaron mas de 5 minutos desde la ultima actualización de la fecha, y si es así, te puedes loguear, si no, pues no.

Y así no importa que cierres tu navegador sin cerrar tu sesión.

Saludos
Efectivamente lo que dice quike88 es correcto esa es la forma más simple y completa de realizarlo.

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #10 (permalink)  
Antiguo 01/07/2011, 16:12
 
Fecha de Ingreso: octubre-2008
Mensajes: 147
Antigüedad: 16 años, 1 mes
Puntos: 3
De acuerdo Respuesta: Condicionar Sesiones en PHP

Cita:
Iniciado por quike88 Ver Mensaje
Lo que se hace en estos casos, como dijo sourcegeek es actualizar la fecha de (en tu caso) LoginLastTime cada vez que visitas una página.

Si intentas loguearte desde otro lado, verificas que si pasaron mas de 5 minutos desde la ultima actualización de la fecha, y si es así, te puedes loguear, si no, pues no.

Y así no importa que cierres tu navegador sin cerrar tu sesión.

Saludos

Ahh... supongamos que mi sesión está registrada en mi navegador firefox y me fui, despues llego feliz de la vida y trato de entrar a una sección... entonces tendría que crear un comando que cada que entre a la pagina me compare el tiempo actual con el LoginLastTime, de ser mayor a 1800 segs lo cierre y marque 0 el LoginAct...


Ok entendido, seria entonces agregar en cada pagina algo como

Código PHP:

if(isset($_SESSION['MiDinastia'])){ include 'ChecadorTiempo.php'; } 
y crear en ChecadorTiempo.php los parametros necesarios... ok ok


Gracias, si me atoro vendre de nuevo
  #11 (permalink)  
Antiguo 01/07/2011, 16:23
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 14 años, 1 mes
Puntos: 511
Respuesta: Condicionar Sesiones en PHP

Cita:
Iniciado por dfmex Ver Mensaje
Ahh... supongamos que mi sesión está registrada en mi navegador firefox y me fui, despues llego feliz de la vida y trato de entrar a una sección... entonces tendría que crear un comando que cada que entre a la pagina me compare el tiempo actual con el LoginLastTime, de ser mayor a 1800 segs lo cierre y marque 0 el LoginAct...


Ok entendido, seria entonces agregar en cada pagina algo como

Código PHP:

if(isset($_SESSION['MiDinastia'])){ include 'ChecadorTiempo.php'; } 
y crear en ChecadorTiempo.php los parametros necesarios... ok ok


Gracias, si me atoro vendre de nuevo
No es necesario, ya que php en su archivo php.ini tiene la configuración del tiempo límite de vida de las sesiones, de eso no te preocupes, ya que el servidor las elimina automáticamente después de un tiempo, pero es necesario por seguridad que tú también controles ese proceso.

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125

Etiquetas: sesiones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:11.