Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/09/2013, 09:48
jctoledo
 
Fecha de Ingreso: agosto-2010
Mensajes: 105
Antigüedad: 13 años, 8 meses
Puntos: 3
Evitar acceso simultáneo a sistema

Buenos días, esto más que consulta es una pequeña aportación a un tema que por varios años he buscado y leído sin llegar a una buena solución, esto es el evitar que una persona le "pase" el usuario y contraseña a otros para entrar a un sistema hecho en php.

Si bien existen muchas maneras de evitar que alguien se firme (loguee, accese, entre, etc) de manera simultánea, el problema que he visto y que no se ha logrado resolver es el hecho de que el usuario salga de la aplicación cerrando directamente el navegador, o que se le fuera la luz o cosa similar, esto haría que la sesión se quede abierta.

Al igual que todos los que han aportado ideas, sigo en las mismas ante éste problema y he llegado a la conclusión de que por la limitante del manejo de sockets, tiempo de vida de sesiones y funciones es más bien un asunto que debemos resolver por medio de lóǵica.

Hay algunas maneras aunque muy rudimentarias que nos podrían ayudar a evitar las miles de llamadas al teléfono pidiendo que le desbloquees la cuenta:

1.- Evidentemente se requiere poner un enlace o botón para cerrar la sesión, algo que el usuario nunca usa.

2.- Todo usuario de un sistema de cómputo seguramente tendrá una cuenta de correo (dudo que no lo tuviera), en estos casos en mis desarrollos pido una cuenta de correo del usuario para hacerle llegar su contraseña cuando se registra.

3.- Crear una tabla "activo" por ejemplo que tenga 2 campos: "usuario" y "aleatorio", el campo usuario deberá ser único o primario (como quieran, para evitar duplicidad) en esta tabla se ingresará el nombre de usuario que entre al sistema y un número aleatorio de unos 4 dígitos (9,999 posibilidades)

Lógica de ingreso:
1.- Una vez que el usuario ingresa al sistema, creamos un número aleatorio de 4 dígitos, lo guardamos en una variable de sesión ($_SESSION['aleatorio'] por ejemplo) e ingresamos en la tabla “activo” el usuario y el número aleatorio. (en caso de que alguien ya se hubiese firmado con el mismo usuario se negaría el acceso ya que el campo es único o con una simple consulta a la tabla para saber si está el registro.

2.- Cada vez que el usuario ejecute una acción (consultar, actualizar, ingresar etc), el sistema deberá comprobar si el valor de la variable de session ($_SESSION['aleatorio'] por ejemplo) corresponde al que está en la tabla “activo” asignado al usuario en línea.

Hasta aquí nada nuevo para las ideas (aún mejores que esta) para evitar el acceso simultáneo, pero recuerden que mi idea es más de lógica que de codificación, repito: lo que quiero es evitar que me llamen a cada rato para desbloquear la cuenta.

Si simplemente desarrollamos una aplicación para que el usuario la libere ( es este ejemplo sería un código php para borrar el registro del usuario en la tabla “activo”) , cualquiera lo haría y tendría acceso al sistema, incluso sin sacar del mismo al primero que entró.

Aquí es donde saco provecho de los puntos anteriores:
Desarrollar una aplicación php en la que el usuario que cerró el navegador o se le fue la luz o se le quemó la computadora pueda liberar su cuenta de la siguiente manera:

a) Cuando ingrese el usuario y contraseña, el sistema revisará si en la tabla “activo” está dicho usuario, al encontrarlo lo canalizará a otra página o si gustan mostrar un vínculo o botón en esa misma página que ejecute un código el cuál envíe a su buzón de correo el número aleatorio que se creó en la sesión anterior (lógicamente en la tabla donde tengan los datos de sus usuarios deberá tener el correo electrónico), una vez enviada la solicitud llevas a tu usuario a una página donde pida ingresar el número recibido por correo.

b) Una vez recibido el código lo ingresará en el sistema y si coincide, ejecutará el código para borrar el registro en la tabla “activo” y lo llevas a la página de ingreso nuevamente donde se creará un nuevo número aleatorio.

Así de simple. Si le pensamos un poco sobre las posibilidades de “malicia” de los usuarios para loguearse simultáneamente no podrán con esta lógica (aunque compartan el correo electrónico) ya que cada acción que lleven a cabo comprueba el número aleatorio y si es porque cerraron el navegador, ya puede él mismo desbloquearla.

Es muy rudimentario, sencillo, pero ayudará en algo.