Проблема входа в систему с php - PullRequest
0 голосов
/ 08 июня 2010

Я хочу предотвратить одновременный вход в систему с одинаковыми учетными данными.Поэтому я создал столбец login_status и установил его в 1, когда кто-то входил в систему, и изменил на 0 при выходе из системы, кроме того, я установил сеанс после успешного входа в систему. Если пользователь не будет нажимать на выход из системы (в случае, если пользователь закрывает вкладку или потому чтоиз-за проблем с сетью) он не обновляет базу данных, и тогда нельзя снова использовать эти данные для входа в систему.Поэтому я использую ajax-вызов, чтобы установить текущую метку времени в базе данных с соответствующими учетными данными в журнале, и она обновляется каждые 2 минуты, если пользователь не перемещается с этой страницы.Затем, если кто-то попытается войти в систему с такими же учетными данными, он будет проверять эти отметки времени, если столбец login_status равен 1, а если отметка времени старше 3 минут, он разрешает вход в систему. Затем он решает эту проблему.Но новая проблема заключается в том, что если пользователь закрывает вкладку или окно браузера, и через 3 минуты можно войти в систему с теми же учетными данными и откуда-то войти, и если предыдущий пользователь автоматически открыл эту страницу, он войдет в систему, поскольку сеанс уже установлен.Как я могу предотвратить это.

Ответы [ 2 ]

1 голос
/ 08 июня 2010

Я бы не советовал сохранять сеансы в базе данных, если это абсолютно необходимо. Вы будете больше напрягать базу данных, чем нужно.

Я бы предложил создать новую таблицу, такую ​​как users_logged_in, и вставить идентификатор входа и временную метку пользователя, который входит в приложение, но не перед проверкой таблицы, чтобы сначала проверить, существует ли пользователь.

Затем вы можете удалять любого просроченного пользователя из таблицы при каждом запросе страницы или запросе N страниц, где N - количество запросов страниц.

1 голос
/ 08 июня 2010

Ваш подход - путь сложный и уязвимый для расы.Я предлагаю вам хранить ваши сессии в базе данных.Таким образом, вы всегда можете проверить, вошел ли пользователь в систему, и перезаписать свой предыдущий сеанс, если он вошел в систему дважды.Таким образом, будет действителен только один сеанс.

Посмотрите на http://php.net/manual/en/function.session-set-save-handler.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...