Запретить различным пользователям вход в один и тот же браузер в PHP 7.4 - PullRequest
0 голосов
/ 06 января 2020

мой первый пост здесь.

Я построил систему входа в систему (с проверкой пароля, надежностью, проверками в БД, хэшированием и т. Д. c) и почти готов. Я получил его там, где я могу предотвратить повторяющиеся входы в систему одного и того же пользователя, проверяя два поля в моей базе данных, которые создаются во время процесса входа в систему: одно является случайно сгенерированным токеном в 'token', а другое - 'isSignedIn' либо a 0 и 1. В настоящее время он предотвращает повторный вход в систему для одного и того же пользователя, а также запускает загрузку пользователя при выполнении следующего действия на странице.

Моя следующая цель - запретить двум разным пользователям входить в одну и ту же сеть. браузер на одном компьютере одновременно. Я не нашел solid ответа на этот вопрос после нескольких часов поиска.

Вот проблема, с которой я столкнулся: во время тестирования, когда я вошел в систему с несколькими пользователями в одном браузере:

  1. Я захожу с тремя разными пользователями на свой портал ; у всех трех есть
    их 'token' и 'isSignedIn', записанные в БД

  2. Я выхожу из системы с одним пользователем, и значение токена / isSignedIn этого пользователя
    удалено / изменено соответственно

  3. Когда я выхожу из системы двух других пользователей, значения их 'token' и 'isSignedIn' остаются в базе данных, даже если они успешно вышли из системы.

Я не могу понять, почему выход из системы одного пользователя не позволяет двум другим удалить свой «токен» и «isSignedIn» при выходе. Это работает для первого пользователя, без проблем. Я предполагаю, что есть какое-то перекрытие сеанса, которое убивает двух других. Я не могу сказать клиентам просто «только один человек за раз на одном компьютере в одном браузере», поэтому мне нужна помощь.

Я хотел бы ограничить только одного пользователя в одном браузере за раз или запретить второму / третьему / четвертому пользователю войти в тот же браузер.

Любая помощь будет принята с благодарностью!

Спасибо. Образ базы данных Database Image

Процессор выхода из системы Logout Processor

1 Ответ

0 голосов
/ 06 января 2020
  1. Обратите внимание, что сеанс используется всеми вкладками одного и того же браузера.
  2. Когда вы отменяете и уничтожаете сеанс после выхода первого пользователя, значение $ _SESSION ['email'] теряется из другие вкладки.
  3. Когда вы выполняете оператор SQL для удаления имени входа, он не работает так, как выглядит: update ... WHERE email = ''
  4. Чтобы запретить более одного пользователя чтобы войти в тот же браузер, используйте переменную сеанса пользователя, например ту, которую вы используете (isSignedIn), и установите флажок, чтобы перенаправить пользователя со страницы входа на домашнюю страницу. Поместите следующий код в верхней части страницы входа в систему:

и в действиях по выходу из системы добавьте: $ isSignedIn = 0;

...