2010-06-08 8 views
0

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

+0

Почему в мире вы задаете этот вопрос после того, как уже попросили http://stackoverflow.com/questions/2950355/set-session-in-database-in-php? – halfdan

ответ

1

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

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

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

1

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

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

Смежные вопросы