Controlar accesos

Estoy desarrollando una página con un control de acceso que verifica un login y un password de una base de datos.
Es posible hacer que si un usuario ha entrado no pueda volver a entrar desde otro ordenador o otra ventana del navegador volviendo a acceder mientras no cierre la sesión anterior.

1 Respuesta

Respuesta
1
Si. Es posible, aunque delicado.
Para ello se crea en la base de datos una tabla con las sesiones abiertas en la que se incluyen como campos el ID de la sesión, el timestamp de apertura de la sesión así como el usuario que esta activo en esa sesión.
Cuando alguien intenta identificarse en la página, ademas de ver si el usuario y la contraseña son correctas, hay que mirar que ese usuario NO ESTE en esa tabla de sesiones abiertas. Entonces se le da acceso y se añade una fila a la tabla de sesiones abiertas con los datos de ese usuario.
Cuando el usuario hace logoff se borra la fila correspondiente a la sesión que tenia abierta.
Pero atención. Hay que tener previsto un mecanismo para evitar que los usuarios que no desconecten correctamente (o sea dándole a un botón de logoff) sino que simplemente cierren el navegador no queden bloqueados sin poder volver a entrar en la página.
Para ello, en cada llamada a cada página hay que colocar una rutina que revise la actividad de las sesiones y cuando descubra que hay, por ejemplo, 5 minutos sin actividad, borre la sesión de ese usuario y la libera.
Bueno, espero haberte servido de ayuda. Adelante.
Pero, ¿no existe alguna forma para que cuando un usuario cierre el navegador ejecutar código en php que actualice la base de datos?
Yo lo consigo con el evento unbeforeUnload pero este evento también se ejecuta cuando el usuario le da a F5 o al botón de Actualizar del navegador. He podido capturar el evento de pulsar F5, para que no actúe pero el botón de Actualizar no soy capaz. ¿Es posible capturar una pulsación del botón de actualizar?
La verdad es que no lo sé.
Lo que si he programado alguna vez en javascript es el evento onUnload puesto en la etiqueta body.
Puedes hacer que ese evento que se activa al cerrar la página, cargue una nueva página en donde se produzca el logoff del sistema. Es lo que usan muchos sitios de adultos en los que cuando cierras el navegador, se abre automáticamente una página de publicidad o de despedida.
Este ejemplo puede funcionar:
<html>
<head>
<title>Abre al salir</title>
<script>
function abreventana(){
window.open("logoff.php","venta","")
}
</script>
</head>
<body onunload="abreventana()">
</body>
</html>
Aún así, no todo esta controlado. Puede que el cliente no cierre la sesión a pesar de todo, debido a fallos eléctricos, una caída del servidor, un virus que "cuelga" el ordenador del cliente, un fallo en la conexión a internet...
Resumiendo: es un asunto delicado que hay que tener muy controlado.
Vale.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas