Foros del Web » Programando para Internet » PHP »

Evitar doble logueo..

Estas en el tema de Evitar doble logueo.. en el foro de PHP en Foros del Web. Saludos nuevamente. Explico lo que necesito controlar. Tengo varios perfiles de usuario, y el sistema de asegurar la identidad de cada usuario. Una de las ...
  #1 (permalink)  
Antiguo 04/04/2007, 11:33
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 210
Antigüedad: 17 años, 5 meses
Puntos: 0
Evitar doble logueo..

Saludos nuevamente.

Explico lo que necesito controlar.

Tengo varios perfiles de usuario, y el sistema de asegurar la identidad de cada usuario. Una de las solicitudes es que si UN usuario está logueado en el sistema con un login y un password, no se permita de ninguna manera que se pueda volver a loguear desde otro navegador o desde otra maquina con el mismo usuario.

si me explico??

En pocas palabras no permitir que un hipotetico usuario pueda estar dentro del sistema dos veces con el mismo usuario y password.


Ojalá puedan ayudarme con eso....

Muchas gracias.
  #2 (permalink)  
Antiguo 04/04/2007, 12:05
 
Fecha de Ingreso: marzo-2007
Mensajes: 347
Antigüedad: 17 años
Puntos: 2
Re: Evitar doble logueo..

Creo que la unica forma, seria guardar en una bd cada vez que un usuario se logea, y que antes de logearlo otra vez, compruebe si ese login esta en esa bd, y por supuesto, que cuando la cookie ya no exista, que se borre a los tantos minutos.

Un saludo
  #3 (permalink)  
Antiguo 04/04/2007, 13:38
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 210
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Evitar doble logueo..

Y como sería la forma de verificar si esas cookies existen o no??
  #4 (permalink)  
Antiguo 04/04/2007, 13:51
 
Fecha de Ingreso: marzo-2007
Mensajes: 347
Antigüedad: 17 años
Puntos: 2
Re: Evitar doble logueo..

Pues cada vez que se logeen, comprobar si exite una cookie, $_COOKIE['LOQUESEA'], con un if, if(empty($_COOKIE['Logeado'])) { se crea } y si no esque ya esta logeado, y despues, si alguien se intenta conectar con ese mismo usuario, se comprueba si ese usuario ya esta en la tabla, y si esta en la tabla, no le dejas logearse, por supuesto, los registros de la tabla se deben de borrar al hacer logout, o, si no se hace logout, controlar el tiempo que se ha estado inactivo, y si han pasado mas de x segundos, permitir que se pueda volver a logear.

Si tienes alguna duda te lo explico con algunos ejemplo de php.

un saludo
  #5 (permalink)  
Antiguo 04/04/2007, 14:43
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 210
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Evitar doble logueo..

a ver....

en mi archivo login.php despues de las validaciones correspondientes, Inicio la sesión y le doy algunos valores:

login.php:
Código PHP:
if ($capturaCorrecta )
            {
                
session_set_cookie_params(6000);
                
session_start();
                
$_SESSION['validado'] = true;
                
$_SESSION['usuario'] = $strusuario;                
                
header("Location: home.php");
                exit();
            }
            else
            {
                         
header("Location: login.php");
                exit();
            } 
Y luego, en las paginas que el usuario visita tengo lo siguiente:
saldos.php:
Código PHP:
<?php
session_start
();

if (! isset(
$_SESSION['validado']) || $_SESSION['validado'] !== true){
    
session_unset();
    
session_destroy();
    
header('Location: login.php');
    exit();
}

Para salir de la sesión uso un link hacia:
logout.php:
Código PHP:
<?php    
    session_start
();    
    
session_unset();    
    
session_destroy();    
    
header('Location: login.php');
    exit();    
?>
Pregunta: ¿Cómo implemento eso que me dices? ¿en que momento?

Algo más: Entiendo que cuando el usuario de click en el boton "cerrar sesion" yo debo hacer una rutina que vaya a la base de datos y 'desmarque' al usuario logeado.....
Cómo hacer ese reconocimiento automatico de si existe o no la sesión. supongamos que el usuario no cerro su sesion como debe ser sino que solo cerró la ventana del navegador.

Espero haberme hecho entender....


Y agradecería esos ejemplos de codigo que decís
  #6 (permalink)  
Antiguo 04/04/2007, 22:11
 
Fecha de Ingreso: septiembre-2006
Ubicación: Argentina
Mensajes: 190
Antigüedad: 17 años, 6 meses
Puntos: 1
Re: Evitar doble logueo..

No sirve el sistema de cookies. Si yo abro sesion en Firefox, al abrir el explorer no va a leer niguna cookie... mucho menos si la abro desde otra pc. No conozco ningun sitio que no permita doble login, ni siquiera los correos mas conocidos. Creo que hay manera de bloquear al usuario en la base de datos, pero eso impediría que por ejemplo cierre sesión y la abra de nuevo en pocos segundos. Se puede hacer que busque la "actividad" del usuario y lo marque como online, entonces así no permitir otro login, pero este tipo de sistemas no es muy preciso. Tenés que permitir algunos minutos de inactividad siempre, por eso no funcionaría.

Cual es el problema del doble login?
__________________
Gustavo
  #7 (permalink)  
Antiguo 05/04/2007, 06:14
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 6 meses
Puntos: 49
Re: Evitar doble logueo..

pues la cosa va por el tema de almacenar una variable en la base de datos como te decian pero las cokkies quedan almacenadas solo en el navegador entonces, no te sirve si es lo que quieres pues te recomiendo crees un campo que se llame log o loegeado tonces cuando se conecte el usuario pregunta en base de datos si log es igual 0 logea de lo contrario error hay alguien conectado con ese usuario de otra maquina... entonces cuando te logeas valor cero pasas un update que te cambia el valor por 1 y estas loegado me comprendes esto lo haces solo en los logins... ahora bien cuando te desconectas cambias el valor a 0 y ya esta...

ahora las complicaciones por que no todo es color de rosa...
que pasa si un usuario fui a un cibercafe y dejo la sesion abierta viajo por ej... y quiere conectarse de su casa :/ no podria...
error del cliente cierto... pero para recuperar las cosas deberia tener algo con el mail etc... ;)
ahora que pasa si te cierran el browser por la X o por corte de luz... tonces te tratas de conectar denuevo y zuas no puede :S tonces si se quiere conectar que ponga el digito de verificacion que le llego al mail, tonces deberas crearte un nuevo campo con un valor aleatorio encriptado que le pasas al usuario cuando se logea por primera ves y solo con el se puede volver a conectar casos propuestos anteriormente... y asi resuelves algo pero tiene su contras tambien espero te sirva :)
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #8 (permalink)  
Antiguo 05/04/2007, 08:10
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 210
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Evitar doble logueo..

Por supuesto que me sirven todos los comentarios....

Hacen que vea lo que no he podido ver, en fín.

Lo del valor en la base de datos me parece que es la solución. Parece que el problema es: ¿el usuario dió en la X del navegador o simplemente fallo en el suministro electrico? Este último me preocupa más. El primero lo he solucionado poniendo en las pagina que el usuario visita un función en javascript cuando el evento onunload se dispara, entonces medainte AJAX hago una petición asincrona a la base de datos y quito el status on-line del usuario. (Probado y funcionando).

Faltaría resolver lo del fallo electrico. Pero eso lo veo muy dificil.

¿Qué opinan?
  #9 (permalink)  
Antiguo 05/04/2007, 08:24
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 6 meses
Puntos: 49
Re: Evitar doble logueo..

haber si es un sistema de ingreso puedes poner abajo un
no puede entrar en su sesion? click aqui
y hay explicas, si cerro el navegador y no se deslogeo de forma correcta o bien hubo un sinistro con la electricidad y bla bla bla tu ya sabes mucho bla bla que suena lindo... entonces escriba su nombre de usuario y el codigo proporcionado en el mail...y lo dejas ingresar hay tendrias que preguntar si usuario = usuario
y log = 1 && valid = valid espero me entiendas...
entonces solo lo dejas entrar para que escribir un update nuevamente si ya esta en 1, lo se es algo de trabajo pero es una solucion a tu problema...
hay varias opciones, pregunta secreta, etc... tu decides que haces en el logeo en caso de sinistro de luz, ahora me parece que hay una opcion que si cierras el navegador te de un aviso con javascript... puedes decir que debe cerrar la sesion y que puede tener problemas de ingreso.... etc...
me parece que es ajax si mal no recuerdo lo ocupa gmail cuando descartas un mensaje :) tendrias que barajar todas esas posibilidades....
bueno lo otro como te decia lo del codigo de credibilidad pues hay varios script que generan codigo aleatorio solo lo guardas y lo comparas ;) hay ves si lo haces encriptado o no.. bueno cualquier cosa y se me ocurre algo...
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #10 (permalink)  
Antiguo 05/04/2007, 15:01
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Re: Evitar doble logueo..

No leí todo por completo, pero logueos únicos es algo que se usa, y la tabla en la db es la manera mas aplicada.

Esta table debe tener un campo con el timestamp de la hora de logueo/última consulta a una pagina.
Luego, la idea es ir borrando los usuarios que estén X minutos sin actividad ($sql = "delete from tabla where campoHora < ". ( time() - TIEMPO_INACTIVO ); ).

Luego necesitas validar de si la session existe (lo tradicional) + si está en la tabla ésta, y cada vez que recarga la pagina actualizas el tiempo del usuario en la tabla.

Si se desloguea lo borras, y si cierra el browser, no se podrá loguear pasados estos segundos.
Hay maneras de hacer esto un poco mas inteligente, pero arrancaría con hacer que esto funcione de la manera tradicional, luego podes agregarle funcionalidades.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 12:07.