2009-12-27 29 views
6

¿cómo se puede verificar si un usuario ya inició sesión?comprobar si un usuario ya ha iniciado sesión?

de modo que si un usuario en otro navegador no puede iniciar sesión con la misma cuenta.

también, ¿es esta una buena solución o debería permitir que el usuario inicie sesión en el otro navegador y luego cierre la sesión del usuario actual y muestre un mensaje (está conectado desde otra ubicación) como lo hace Messenger?

Respuesta

1

La primera mitad de la pregunta fue respondida bien con la forma de detectar a los usuarios múltiples, pero cómo tratarlos creo que todavía necesita un poco de trabajo.

Primero, si un usuario inicia sesión correctamente, déjelo entrar, no lo impida si está conectado en otro lugar. Si realmente no desea que el usuario tenga dos sesiones abiertas, cierre la sesión anterior o simplemente actualice la identificación de sesión que está guardando para que pueda relanzar la conexión anterior. Puede informar si lo desea, pero solo enviaría un mensaje a la sesión que ha invalidado. Si le envía un mensaje al usuario que se registra, se vuelve molesto cuando solo se trata del caso de un usuario que cambia de computadora y se olvidó de cerrar la sesión anterior.

3

Genere un token aleatorio al iniciar sesión (o use el ID de sesión), y almacénelo en la base de datos y en la cookie de los usuarios. Con cada acceso a la página, asegúrese de que el token de los usuarios coincida con la entrada de la base de datos. Si los dos no coinciden, advierta al usuario que se ha conectado a otra parte.

También podría almacenar el tiempo de inicio de sesión, que posteriormente sería el momento en que se asignó el token, y requieren 30 minutos antes de permitir que otro usuario inicie sesión con la misma ID.

+0

El almacenamiento de la ID de sesión en la base de datos es incluso mejor. – TravisO

+0

Eso también funcionaría, TravisO :) – Sampson

2

El uso de sessions es una buena forma de hacerlo, y es un método muy común para controlar la autenticación.

El flujo general se ve algo como esto: visitas sitio

  • usuario y session_start() se llama. Se establece un identificador de sesión único para ese visitante (es decir, una cookie).
  • El usuario envía sus credenciales de acceso a un formulario de acceso
  • credenciales de acceso se verifican, y este hecho se almacena en los datos de la sesión con $_SESSION['logged_in'] = true, o algo similar
  • Para el resto del tiempo del usuario en el sitio, puede comprobar $_SESSION['logged_in'] para ver si el usuario ha iniciado sesión.

con el fin de controlar los inicios de sesión de un usuario, simplemente podría tener un campo de una base de datos (users mesa está muy bien) que indica lo que el id de sesión actual es (recuperada con session_id()) para el usuario, y si no coincide con el valor de la cookie que jus t recibido, inmediatamente llama al session_destroy() para esa identificación y considera que el usuario ha cerrado la sesión.

El uso de $_SESSION significa que no tiene que preocuparse por generar sus propios tokens, y le da la potencia de los superglobales incorporados para facilitar el almacenamiento de información sobre el estado de autenticación del usuario.

Personalmente, permitiría que varias sesiones estén activas para un usuario en la mayoría de los sitios web, ya que generalmente no hay una buena razón para no hacerlo, pero obviamente depende de la naturaleza del sitio. Sin embargo, almacenar la identificación de la sesión activa actual como se mencionó anteriormente es una forma bastante simple de lograr esto.

+0

Recuerde también generar una nueva sesión después de que se produzca el inicio de sesión, si solo genera una sesión en la primera vista de página en el formulario de inicio de sesión y no se regenera, existen formas de explotar ese usuario . – TravisO

0

Bien Todas las soluciones mencionadas anteriormente funcionarán pero si en cada acceso de página está haciendo una llamada a la base de datos y buscando el token de sesión para ver el clima es el mismo token asignado al usuario ... matará su tiempo de respuesta. Lo que voy a sugerir es usar un mecanismo de caché en lugar de la base de datos en las soluciones anteriores. el almacenamiento del token de sesión en la base de datos agregará un campo adicional a su base de datos que en realidad no es necesario. Use una solución de almacenamiento en caché de código abierto como Memcache.

0

se puede hacer una tabla como userLoginStatus con campos como el tiempo Clockin & tiempo Clockout, e insertar la hora actual en Clockin cuando el usuario es hacerlo de acceso, deje Clockout tiempo en blanco en ese momento, que debe actualizarse sólo cuando el usuario haga del reloj sobre el botón de cierre de sesión, para que pueda verificar el estado actual del usuario específico, donde clockOut está vacío que el usuario debe iniciar sesión, ya que se actualiza solo cuando el usuario cierra la sesión.

Cuestiones relacionadas