Ver Mensaje Individual
  #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