PHP / SESSION: Логин один на пользователя?

Как я могу сделать это, только 1 может быть онлайн для 1 пользователя в то время? Идея?

Таким образом, вы, например, не можете войти в User1 на одном компьютере / браузере, а затем на другом компьютере / браузере для входа в User1?

У меня есть моя communitysystem в PHP, и она хранится в сессиях.

Вы можете сохранить идентификатор сеанса (и время последнего доступа) в базе данных и отклонить попытки входа для пользователей с разными идентификаторами сеанса, если последнее время доступа слишком велико (например, за последние 20 минут). Разумеется, очистите идентификатор при выходе из системы.

Однако обратите внимание, что если пользователь закрывает свой браузер без выхода из системы, а затем снова открывает его, они могут быть заблокированы на некоторое время (20 минут выше или любой другой интервал, который вы решите), поскольку у них не будет соответствующего сеанса cookie больше.

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

Вход в систему:

 UPDATE `users` SET `active_session`='$session_id'; 

Когда пользователь переходит на страницу, требующую входа в систему, вы выполняете поиск этого значения:

 SELECT * FROM users WHERE `active_session`='$session_id'; 

таким образом, если пользователь подписывается в другом месте, предыдущий ключ сеанса перезаписывается, а SELECT выше возвращает пустой набор результатов.

Нет необходимости использовать сеансы. Просто сделайте столбец в таблице users базы данных независимо от того, зарегистрирован пользователь или нет. Проверьте это оттуда.

Столбец можно назвать LoggedIn и может быть enum ('Yes','No') . Кроме того, сохраните время последнего входа в некоторый столбец LastLoggedIn Итак, когда пользователь хочет войти в систему, сначала проверьте:

 select 1 from users where ID = {$UserID} and `LoggedIn` = 'No' 

Если строка возвращается, позвольте ему войти в систему.

Если кто-то забывает выйти из системы:

Запустите задание cron или скрипт, который сбросит статус LoggedIn после установленного периода времени пользователей, которые вошли в систему дольше нескольких часов, проверяя время LastLoggedIn .

Только для тех, кому это может понадобиться в будущем.

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

Таким образом, идентификатор сеанса будет отличаться на каждом устройстве, которое они используют для входа.

Лучший способ сделать это – создать дополнительный столбец в вашей таблице пользователей, который по умолчанию установлен на 0 (false), а при входе в систему – 1 (true). Затем, когда пользователь выйдет из режима сброса до 0. Запустите проверку каждые пару часов, для чего пользователь должен нажать «Да», чтобы продолжить сеанс или автоматически выйти из системы после того, как таймер обратного отсчета достигнет нуля. Пол здесь заключается в том, что чем дольше вы оставите его до тех пор, пока вы не запустите свой чек, тем дольше пользователь должен будет ждать, чтобы снова войти в систему, если они покинули ваш сайт и вернулись прямо, не выйдя из строя должным образом, поскольку таблица пользователя все равно будет правдой пока не выйдет из системы. Побочный эффект чаще всего запрашивает пользовательский ввод, чтобы потерять доступ в течение более длительного времени. Его нужно взвешивать, чтобы он не раздражал пользователя. Вы можете обнаружить, что пользователь покинул ваш сайт с помощью js, а затем вышел из системы, но пользователь может отключить его и, следовательно, ненадежен.

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

Способ, которым я его разработал, состоит в том, что у меня есть одна таблица, где я храню начало и конец сеанса. Это будет использоваться для того, чтобы пользователь мог узнать, сколько времени прошло последнее посещение, и когда он / она был в последний раз.

Затем я разработал таблицу сеансов, где я обновляю время / дату всякий раз, когда пользователь что-то делает. Если время здесь старше 30-60 минут (еще не определил диапазон), значение сеанса будет удалено. Это позволяет пользователю снова войти в систему позже, если он решит это сделать. Но не в течение 30-60 раз.

Сеансовый стол будет прослеживаться по заданию cron.

Моя идея. Продолжим здесь первый ответ, который я видел:

Вы можете сохранить идентификатор сеанса (и время последнего доступа) в базе данных и отклонить попытки входа для пользователей с разными идентификаторами сеанса, если последнее время доступа слишком велико (например, за последние 20 минут). Разумеется, очистите идентификатор при выходе из системы.

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