Разрешить только одну сессию за раз - PullRequest
7 голосов
/ 02 июля 2010

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

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

Ответы [ 5 ]

10 голосов
/ 03 июля 2010

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

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

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

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

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

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

5 голосов
/ 02 июля 2010

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

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

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

3 голосов
/ 02 июля 2010

Я думаю, вам нужно сделать что-то подобное:

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

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

0 голосов
/ 02 июля 2010

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

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