Разрешать только одну сессию

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

С уважением. Вениамин

Solutions Collecting From Web of "Разрешать только одну сессию"

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

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

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

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

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

Надеюсь это поможет. Спасибо.

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

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

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

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

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

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

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