primero intenté crear un campo de estado de inicio de sesión en la tabla y, de forma predeterminada, será 0 y cuando el usuario inicie sesión, se actualizará a 1. Entonces, cuando otros intentaron iniciar sesión con la misma cuenta, no pudieron iniciar sesión. pero el problema es cuando actualizo el estado de inicio de sesión cuando el usuario hace clic en el botón de cierre de sesión, pero cuando se corta la conexión a Internet o la PC se apaga o el usuario cierra el navegador sin hacer clic en el botón de cierre de sesión, entonces el estado de inicio de sesión no se puede actualizar y siempre muestra 'alguien ya ha iniciado sesión'.
segundo intento , genero un token de inicio de sesión en el momento del inicio de sesión y lo almaceno en la base de datos y la sesión también. En cada evento, compruebo el token de la base de datos con la sesión, si es verdadero, luego los dejo procesar. y cuando otro usuario inicia sesión con la misma cuenta, el token se actualiza y el usuario anterior cierra sesión debido a que la sesión no coincide con la base de datos
pero quiero que otro usuario no pueda iniciar sesión mientras un usuario ya ha iniciado sesión. Porque estoy creando el portal de exámenes en línea, por lo que en este el primero no funciona cuando el navegador del usuario se cierra directamente o el sistema se apaga y el segundo permite el otro usuario para iniciar sesión y cerrar la sesión del usuario anterior
¿Hay alguna forma de evitar que otro usuario no pueda iniciar sesión mientras uno está conectado?
Parece que necesita realizar un seguimiento de los usuarios conectados activos en vivo. Yo usaría sockets web.
La pila de ejemplo sería: Node.js backend + biblioteca socket.io. Si tiene una aplicación php existente, tal vez agregue un microservicio para eso. Con javascript, también puede realizar un seguimiento de la identificación del dispositivo y la desconexión/reconexión de un dispositivo específico debido a problemas de red.