PHP - Остановить параллельные логины пользователей - PullRequest
8 голосов
/ 25 мая 2011

Мне нужен метод остановки одновременных входов в систему с использованием PHP / MySQL.

Текущая настройка

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

Что я пробовал

Около 10 статей о stackoverflow и гуглил столько, сколько я могу.

Я также попытался добавить поле «loggedin» в таблицу пользователей, которое при входе в систему было установлено на 1, а при выходе было установлено на 0. Затем, если те же учетные данные пользователя, которые использовались при входе в систему, произойдет сбой. *

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

Это неосуществимо в будущем, так как продукт скоро будет развернут примерно для 20 человек.

Что мне нужно

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

Ограничения

Наши хостинг-провайдеры ужасны, и впоследствии то, что я могу сделать на сервере, ограничено / невозможно. Хостинг является решением общего хостинга.

Ответы [ 5 ]

7 голосов
/ 25 мая 2011

Мне нужно найти способ, чтобы при закрытии браузера выполнялся скрипт для обновления базы данных.

Вы не можете.

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

3 голосов
/ 25 мая 2011

возможно, вам следует перевернуть это.

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

таким образом, только один человек может войти в систему одновременно.

1 голос
/ 25 мая 2011

Не существует надежного способа сделать это, по самой природе HTTP. Но если вы можете справиться с некоторой задержкой, есть решение.

Лучшее, что вы можете сделать, - это запустить JS-скрипт в сценарии «keep-alive» на вашем сервере. Делайте это каждые 30 секунд или около того. Если ваш сервер не получил ответа от клиента в течение 1 минуты, закройте сеанс.

0 голосов
/ 24 октября 2011

Я использую сценарий сеанса задержки jquery для автоматического выхода из системы. Скрипт перезвонит php-скрипт, с помощью которого мы можем изменить отметку времени сеанса базы данных. Итак, я думаю, что эта ссылка поможет вам. Jquery простаивает

0 голосов
/ 25 мая 2011

Вы можете использовать поле «loggedin», но добавив другое поле «loggedin_timestamp». Затем вы проверяете, когда пользователь вошел в последний раз.

Если оно больше времени сохранения сеанса, вы разрешите ему снова автоматически войти в систему

...