Как предотвратить одновременный вход нескольких пользователей в php? - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть фрагмент страницы входа в систему php код, как показано ниже, который проверяет имя пользователя / пароль из таблицы control_panel . Мое приложение для входа ниже позволяет только определенным c пользователям (представленным в control_panel таблица) войти в систему.

if (isset($_POST['user_name'], $_POST['user_pass']) && $_POST['user_login'] == 1) {

    if ($user_from_db && password_verify($password, $user_from_db->user_pass)) {                            
        $sql = "SELECT * FROM trace_users";
        if($result = mysqli_query($connect, $sql)){
            if(mysqli_num_rows($result) > 0){
                while($row = mysqli_fetch_array($result)){
                    if($row['open'] == "true") {
                        echo "user " . $row['user_name'] . " is logged in so you cannot login";
                        break;
                    }
                }
            } else{
                echo "No records matching your query were found.";
            }
        }

        $_SESSION['pageadmin'] = true;
        $_SESSION['user_name'] = $username;
        $open="true";
        $stmt= $connect->prepare("UPDATE trace_users SET open=? WHERE user_name=?");
        $stmt->bind_param('ss', $open, $_SESSION['user_name']);
        $stmt->execute();
    } else {
        echo "Invalid Login Credentials.";
    }
}

Хотя php позволяет одновременный вход от разных пользователей одновременно, я пытаюсь добиться того, чтобы один пользователь вошел в систему (допустим, userA) , и если любой другой пользователь (допустим, userB) попытается войти в систему одновременно, тогда сообщение должно будет отображаться, что userA вошел в систему, поэтому вы не можете войти в систему .

В настоящее время я использую две таблицы для кода выше.

1. Одна таблица control_panel содержит весь список имен пользователей / паролей (пароли в зашифрованном формате).

2. Другая таблица trace_users (снимок экрана показан ниже) хранит записи о зарегистрированных пользователях. Если какой-либо пользователь вошел в систему, тогда столбец open покажет значение true, в противном случае будет отображаться значение false.

enter image description here

Проблема Утверждение:

Мне интересно, какие изменения я должен внести в приведенный выше код php, чтобы только один пользователь мог одновременно войти в приложение php.

Это то, что я пытался, но я думаю, что нужно сделать больше:

$sql = "SELECT * FROM trace_users";
if($result = mysqli_query($connect, $sql)){
    if(mysqli_num_rows($result) > 0){
        while($row = mysqli_fetch_array($result)){
            if($row['open'] == "true") {
                echo "user " . $row['user_name'] . " is logged in so you cannot login";
                break;
            }
        }
    } else{
        echo "No records matching your query were found.";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...