Установите ключ в вашем сеансе, который вы храните в базе данных в пользовательской таблице:
Таблица пользователя
- user_id
- имя пользователя
- пароль
- лексема
при входе в систему:
- создать случайный токен
- ОБНОВЛЕНИЕ пользователя SET token = 'MyRandomToken' ГДЕ username = 'username' и пароль = 'password';
- $ _ SESSION ['login_token'] = 'MyRandomToken';
На каждой странице:
- SELECT user_id, username, token ОТ пользователя WHERE token = '$ _ SESSION [' login_token ']';
- Если не найден, токен логина больше не действителен.
Это гарантирует, что срок действия логина истечет автоматически, если есть более новый логин. На каждый аккаунт может быть только один зарегистрированный пользователь.
UPDATE
Только что увидел ваш комментарий к Вопросу. Мой ответ не работает для вас, так как он не запрещает второй вход в систему, но делает недействительным любой предыдущий вход.
Если вы хотите запретить повторный вход в систему, лучшим решением будет использование временной отметки, которую вы обновляете на каждой странице:
При входе в систему:
(при условии 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';