Foros del Web » Programando para Internet » PHP »

Evitar el uso multiple de un password

Estas en el tema de Evitar el uso multiple de un password en el foro de PHP en Foros del Web. Saludos a todo el foro ......tengo una pagina web con cierto contenido de acceso restringido y solo para usuarios registrados....la pregunta e inquietud es la ...
  #1 (permalink)  
Antiguo 30/01/2007, 11:40
 
Fecha de Ingreso: junio-2005
Ubicación: Soy Latinoamericano pero
Mensajes: 95
Antigüedad: 18 años, 10 meses
Puntos: 0
Evitar el uso multiple de un password

Saludos a todo el foro ......tengo una pagina web con cierto contenido de acceso restringido y solo para usuarios registrados....la pregunta e inquietud es la siguiente,...como hago para evitar que ingresen otras personas a la misma vez usando el mismo ID y password?, es decir ..si en estos momentos se ha logeado un usuario con ID y Pass "AB"...como hago para evitar que a la misma vez otra persona pueda ingresar a la zona restringida usando el mismo ID y Pass?...por favor alguien puede ayudarme en este tema?...gracias de antemano
Jolpuz
  #2 (permalink)  
Antiguo 30/01/2007, 11:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Evitar el uso multiple de un password

Hola jolpuz

Podrias asignar su IP en la tabla de usuarios, y una bandera que te indique que estan loggeados, asi a la hora de que se quiera validar otro, le arroje un error de que ya estan loggeados y que no pueden entrar.
  #3 (permalink)  
Antiguo 30/01/2007, 11:47
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Re: Evitar el uso multiple de un password

Lo que yo hize para resolver este problema es, agregar un campo mas en la tabla de usuarios, que se llama "connect", donde 1 es que esta registrado y 0 es no registrado = P

Entonces cuando ingresan y se valida al usuario y este posee el nick y password correctos inserto 1 en campo connect. Nada mas que existe el problema de que si cierran la ventana de forma indebida o se apaga la computadora ya no podran ingresar los usuarios. Esto lo resolví poniendo un link - si el usuario es administrador - del estado de los clientes teniendo lo oportunidad de cambiar el "connect" del usuario.

Espero que te sirva la manera en como yo resolví dicho problema

Saludillos.
  #4 (permalink)  
Antiguo 30/01/2007, 11:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Evitar el uso multiple de un password

Para esos casos mauled, guardas el tiempo cuando iniciaron sesion, luego usas cron job, si tienen ej mas de 30 minutos inactivos, pasas esa bandera a 0.
  #5 (permalink)  
Antiguo 30/01/2007, 11:51
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Re: Evitar el uso multiple de un password

jeje el problema esta en que si el usuario quiere entrar inmediatamente! no va querer esperar 30 o "x" tiempo a que desbloque su cuenta, y por seguridad al administrador de este sistema no lo dimos acceso a la bd , entonces tuvimos que ponerle ese link para que desbloqueara a los usuarios...

Saludillos.
  #6 (permalink)  
Antiguo 30/01/2007, 12:37
 
Fecha de Ingreso: junio-2005
Ubicación: Soy Latinoamericano pero
Mensajes: 95
Antigüedad: 18 años, 10 meses
Puntos: 0
Re: Evitar el uso multiple de un password

Hola Mauled.....gracias por tu respuesta...de acuerdo a lo que tu dices....habria la manera de que esto se desbloquue automaticamente despues de unos segundos sin necesidad de la actuacion de un administrador? es por lo que nadie podria estar pendiente del servicio las 24 horas....en verdad me urge solucionar esta interrogante....sabes de algo mas?
Jolpuz
  #7 (permalink)  
Antiguo 30/01/2007, 17:44
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Evitar el uso multiple de un password

Hola jolpuz,

Yo uso una clase que administra las sesiones. Aqui te posteo parte del codigo de esa clase que creo te va a servir:

En tu tabla de usuarios, añade tres campos:

conectado
ultima_actividad
ip_login

codigo sql
Código:
ALTER TABLE `usuarios` 
ADD`conectado`CHAR(1)DEFAULT'0'NOTNULL,
ADD`ip_login`CHAR(20)NOTNULL,ADD `ultima_actividad` CHAR( 15 ) NOT NULL ; 
Luego, cuando un usuario se loguea, modificas la informacion de estos campos. En conectado seteas un 1 y en ultima_actividad guardas la hora en ese momento (de preferencia usa time() para que te devuelva la hora Unix):

Código PHP:
//se loguea el usuario
$usuario_id;// AQUI ESTABLECES EL ID DEL USUARIO; O EL IDENTIFICADOR QUE USES PARA ESTOS
$query "UPDATE usuarios SET conectado=1, ip_login='".$_SERVER['REMOTE_ADDR']."', ultima_actividad='".time()."' WHERE usuario_id=$usuario_id";
@
mysql_query($query); 
luego, en todas las paginas de tu sitio colocaras este pedazo de codigo que actualizara la ultima_actividad de tu usuario

Código PHP:
$usuario_id;// AQUI ESTABLECES EL ID DEL USUARIO; O EL IDENTIFICADOR QUE USES PARA ESTOS
$query "UPDATE usuarios SET ultima_actividad='".time()."' WHERE usuario_id=$usuario_id";
@
mysql_query($query); 
en la pagina de salida (logout), pues borras/actualizas todos estos valores
Código PHP:
$usuario_id;// AQUI ESTABLECES EL ID DEL USUARIO; O EL IDENTIFICADOR QUE USES PARA ESTOS
$query "UPDATE usuarios SET conectado=0, ultima_actividad='".time()."' WHERE usuario_id=$usuario_id";
@
mysql_query($query); 
Bien, para evitar que el mismo usuario se loguee dos veces desde sitios diferentes pues debes checar que el campo conectado tenga el valor 0, caso contrario no se podra loguear.

Aqui viene lo bueno. Para evitar que el usuario que haya cerrado "accidentalmente" la ventana sin antes cerrar su sesion no pueda loguearse de nuevo, en todas las paginas de tu sitio deberas verificar la BD en buscade registros cuya ultima_actividad se haya dado hace x segundos.... algo asi:

Código PHP:
$tiempo_fuera 300 //tiempo maximo de inactividad en segundos, en este caso 5 minutos
 
$limite time() - $tiempo_fuera;
$query "UPDATE usuarios SET conectado=0 WHERE ultima_actividad < $limite";
@
mysql_query($query); 
Esto ira en todas tus paginas. Debes entender que ese tiempo que das no puede ser de solo segundos, ya que inactivarias totalmente al usuario. imagina que este tenga que escrbir un mensaje y que se demore 2 minutos. Si tu pones este tiempo muy corto, pues entonces cuando el usuario haya terminado el mensaje y lo envie el sistema le borrara la sesion, pues habra excedido el tiempo maximo de inactividad.

EN RESUMEN: Lo mejor es que trabajes con la ip del usuario. Puedes simplemente guardar en un campo de tu tabla la ip desde la cual se esta logueando, y si se quiere loguear desde una ip diferente, pues simplemente que rechace esta peticion. Ademas, si el usuario cerro la ventana por accidente, para evitar que no pueda volver a entrar, en la pagina de login verificas si la ip guardada es la misma que la ip del usuario que pretende ingresar. Si es la misma, quiere decir que esta tratando de volver a iniciar sesion y pues le permites crear nuevamente su sesion.


Espero se me haya entendido , si no me avisas para postear nuevamente y hacerlo mas claro

Salu2
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 12:14.