Может любой предполагать, что лучший метод в PHP для создания пользователя входит в систему только от одной машины за один раз.
Установите ключ в сессии, который вы храните в базе данных в таблице пользователей:
Таблица User
On Login:
На каждой странице:
Это гарантирует, что срок действия логина истечет автоматически, если появится новый логин. В каждой учетной записи в любой момент времени может быть только один вошедший пользователь.
UPDATE
Только что увидел ваш комментарий к вопросу. Мой ответ не работает для вас, поскольку он не запрещает второй вход, а вместо этого аннулирует любой предыдущий вход.
Если вы хотите предотвратить повторный вход, то использование временной метки, которую вы обновляете на каждой странице, является лучшим решением:
On login:
(Assuming MySQL:)
SELECT user_id
FROM user
WHERE username='username'
AND password='password'
AND last_access < DATE_SUB(NOW(), INTERVAL 10 MINUTE);
Если строка была найдена, то учетная запись существует, и вход не блокируется другим входом. Возможно, вы захотите разделить этот запрос на два (сначала проверить логин, затем проверить последний доступ), чтобы дать лучшее сообщение об ошибке для неудачных логинов, иначе будет либо "аккаунт не существует", либо "заблокирован".
На каждой странице:
UPDATE user
SET last_access=NOW()
WHERE user_id='CurrentUserId';
Вы не можете сделать это исключительно с помощью переменных сеанса, потому что входы с двух разных машин будут иметь отдельные сеансы.
Одно из решений - иметь в базе данных TIMESTAMP
столбец с именем last_active_time
. Установите last_active_time
в NULL, когда пользователь выходит из системы.
Если last_active_time
больше, чем X минут назад (где X - время тайм-аута), предположим, что сеанс пользователя истек, и разрешите соединение из нового местоположения.
Однако вам нужно будет предотвратить повторную активацию старого сеанса, либо установив тайм-аут в переменных сеанса, либо добавив еще один столбец, например login_session_id
в БД, и выгнать пользователя, если идентификатор сеанса не совпадает с идентификатором в БД.