Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Controlar el duplicado de usuario en una zona restringida en tiempo real

Estas en el tema de Controlar el duplicado de usuario en una zona restringida en tiempo real en el foro de Sistemas de gestión de contenidos en Foros del Web. Hola, Una breve explicación ayudará a ponerse en situación. Debo crear una zona restringida con usuario y password (que almaceno en una base de datos). ...
  #1 (permalink)  
Antiguo 14/12/2004, 09:45
 
Fecha de Ingreso: diciembre-2003
Ubicación: Catalunya (Spain)
Mensajes: 13
Antigüedad: 20 años, 4 meses
Puntos: 0
Controlar el duplicado de usuario en una zona restringida en tiempo real

Hola,

Una breve explicación ayudará a ponerse en situación.
Debo crear una zona restringida con usuario y password (que almaceno en una base de datos). Para esto ninguna duda. El problema viene cuando quiero evitar que, por ejemplo, los clientes se puedan 'pasar' el usuario y password y puedan acceder más de uno con el mismo usuario y password a la vez.
¿Como puedo evitarlo?

Salut !!
  #2 (permalink)  
Antiguo 14/12/2004, 12:03
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 5 meses
Puntos: 5
Se supone que tienes que tener un control en la base de datos de los usuarios que están on-line, para ello debes de establecer un tiempo máximo pasado el cual se supondrá que si el usuario no ha realizado ninguna acción está desconectado.
Y entonces se trataría de condicionar el ingreso(login) de usuario evidentemente a que no se le considere actualmente conectado.
Para trabajar con esa tabla, se supone que tienes que trabajar con sesiones, y a cada carga de página de usuario actualizar en la base de datos el momento en que se realizó la petición con la función time() (que devuelve la fecha entimestamp).
De esta forma si se intenta hacer login a través de un usuario supuestamente conectado, cuya sesión no ha expirado, es decir si no ha pasado el tiempo que se considera que ha de pasar sin que el usuario actué para que se le suponga desconectado.
Esto no evitaría que el usuario se conecte un tiempo, cierre sesión y le pasé datos a otro usuario que se logueará, pero al menos no tienes dos usuarios conectados a la vez.
No sé si me he explicado muy bien, espero que al menos te sirva de partida.
sALU2 ;)
__________________
[+]
[+]
  #3 (permalink)  
Antiguo 15/12/2004, 08:43
 
Fecha de Ingreso: diciembre-2003
Ubicación: Catalunya (Spain)
Mensajes: 13
Antigüedad: 20 años, 4 meses
Puntos: 0
Esta bién explicado y es una buena solución.
Aunque yo apuntaba por otro lado y me falta saber una cosa (igual no se puede, pero por preguntar que no quede - para eso estamos aqui)

Habia pensado en añadir un campo a la base de datos de usuario y password, llamado 'activo' (un campo que estara a 0 si el usuario no esta conectado y a 1 si el usuario esta conectado)
Para ponerlo a 1 cuando conecte ningún problema porque se puede hacer al mismo tiempo que compruebas el usuario y password.
Lo que no se es como detectar cuando ese usuario deja el sitio web. ¿Se puede detectar al momento?

Saludos,
  #4 (permalink)  
Antiguo 15/12/2004, 15:30
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 5 meses
Puntos: 5
Se podría implementar en tu sistema de usuarios un funcioncilla para hacer logout, yo lo he usado alguna vez, lo que hago es destruir la sesión y redireccionar a dónde proceda, o la misma página o a otra:
Código PHP:

    session_destroy
();
    
Header("Location: http://".$SERVER_NAME.$SCRIPT_NAME); 
Pero el problema que tiene esto es que no se destruye la sesión en el caso de que el usuario cierre la ventana, y tampoco es fiable hacer algo con un pop-up usando OnUnload, ya que muchos navegadores modernos impiden que se abran pop-ups. Yo creo que el sistema de time-out es bastante eficaz para determinar estableciendo un pequeño margen de error en tiempo quién está conectado. Todo el mundo que se haya logueado se supone que está conectado de no ser que haya transcurrido ese margen de tiempo.
Respecto de agregar en la base de datos un campo booleano que contenga el estado de conexión del usuario, yo particularmente lo veo innecesario, si agregas un campo que se actualice con cada acceso del usuario en que simplemente metes la fecha en timestamp. Luego te creas una funcioncilla que simplemente dado un usuario devuelva se esta conectado o no y ya esta:
Código PHP:
funcion esta_conectado($usuario)
{
include (
"config.php");
$conectado=true;
$sesion_expira=300//ponemos 5 minutos para suponer a un usuario desconectado
$query=mysql_query("SELECT tiempo FROM usuarios WHERE 1");
$tiemp=mysql_fech_array($query);
if ((
time()-$tiemp["tiempo"])>$sesion_expira$conectado=false;
return 
$conectado;

Con esto te ahorras tener que actualizar un campo de más en la base de datos, y en mi opinión es lo mismo, porque es lo que tendrías que hacer para actualizar el campo.
Pero bueno, yo tampoco soy especialista en sesiones, ni mucho menos, lo mismo alguién con más experiencia sabe de otra solución .

salu2 ;)
__________________
[+]
[+]

Última edición por yoseman; 15/12/2004 a las 15:33
  #5 (permalink)  
Antiguo 17/12/2004, 06:34
 
Fecha de Ingreso: diciembre-2003
Ubicación: Catalunya (Spain)
Mensajes: 13
Antigüedad: 20 años, 4 meses
Puntos: 0
Pués voy a empezar a 'caminar' por esa dirección.
Muchas Gràcias y Felices Fiestas.

Salut !!
  #6 (permalink)  
Antiguo 15/01/2005, 11:24
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 7 meses
Puntos: 1
o.O' ... mm, y porqué no simplemente restringes el logueo mientras haya sesión???.
if(isset($_SESSION['loquesea'])) // etc...
{
// contenido protegido
}
else
{
// logueo del usuario
}
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
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 17:17.