Разрешить только один сеанс одновременно

Я хотел бы сделать свой сайт, чтобы разрешить только одну сессию за раз. Например, скажем, у пользователя есть вход на мой сайт в firefox, если пользователь снова войдет в другой браузер, такой как opera на том же компьютере или другом компьютере, сеанс в firefox будет уничтожен. Однако сеанс на firefox остался, если он остается как один сеанс. Могу я узнать, как я могу это сделать? Я использую php и apache. Спасибо.

с уважением. Бенджамин!--1-->

5 ответов


Я предлагаю вам сделать что-то вроде этого:

предположим, когда пользователь " A "впервые входит в "Com_1". Сохраните уникальный код в базе данных для этого сеанса и то же самое с сеансом пользователя.

в то же время, если он (пользователь "A") снова входит в систему на "com_2", затем проверьте его статус в базе данных и обновите уникальный код в базе данных.

снова назад если тот же пользователь (пользователь "A") обновляет страницу на "com_1", нам все, что вам нужно сделать, это проверьте уникальный код из сеанса и сопоставьте его с базой данных, он наверняка не будет совпадать, затем выйдите из системы и уничтожьте сеанс.

для сохранения пользователя loggedin, даже если браузер закрыт, вы можете сохранить файл cookie в браузере и повторно сгенерировать сеанс соответственно.

надеюсь, что это помогает. Спасибо.


вы можете использовать следующий алгоритм

  1. создайте целое поле в databse userLoggedInCount
  2. при каждом входе в систему увеличьте этот флаг и сохраните результат в сеансе.
  3. при каждом запросе проверить значение в БД и в сессии, и если в сессии меньше, чем в ДБ, invalidate() сеанс и уменьшение значения в базе данных
  4. когда сессия уничтожается уменьшить значение а также

кредиты Божо, потому что он опубликовал это, отвечая на вопрос здесь


храните центральную таблицу базы данных или текстовый файл того, кто вошел в систему в данный момент. Если пользователь уже вошел в другой сеанс, аннулируйте этот сеанс, установив флаг "logged in" равным false.


Я думаю, вам придется сделать что-то вроде этого :

  • добавьте столбец "last_session_id" в таблицу пользователя
  • когда пользователь входит в систему, обновите его поле last_session_id с его текущим идентификатором сеанса
  • на каждой странице, если у пользователя есть аутентифицированный сеанс, проверьте, равен ли идентификатор сеанса записанному в вашей базе данных. Если нет, уничтожьте этот сеанс.

сохранить IP пользователей= > пары SESSION_ID в базе данных. Когда пользователь пытается загрузить вашу страницу, вы должны сравнить фактическую пару IP=>SESSION_ID, а затем разрешить/запретить, если пара в порядке / отличается.