Проблемы с выходом из системы в однопользовательской системе

Меня попросили создать приложение для управления проектами, в котором одновременно мог находиться только один пользователь. Мне удалось сделать это, просто создав status грести в моем user таблица, которая установлена ​​в 1, когда кто-то вошел в систему.

Сейчас, status = 1никто другой не может войти в систему, вместо этого они получают сообщение об ошибке, в котором говорится, что приложение уже использует другой пользователь. Когда пользователь онлайн выходит из системы, я обновляю status строка в базе данных и установить его в 0, чтобы позволить другим пользователям войти в систему свободно.

Все работает просто отлично, за исключением того, что, как вы можете видеть, это зависит от кнопки выхода из системы, и многие пользователи забывают выйти из системы таким образом, они просто закрывают вкладку или браузер, выход status как 1, а затем блокирует всю систему.

Я попытался несколькими способами обновить базу данных на странице закрытия с тайм-аутом сеанса или через onunload но я не мог найти чистый и надежный способ сделать это.

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

Спасибо за вашу помощь.

2 ответа

Решение

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

Не пытайтесь обнаружить окончание сеанса.

Вы могли бы reduce the user's Session timeout, Я думаю, что вы можете сделать это как из Php и Webserver (Apache, IIS, ..), действительно стоит взглянуть на страницы руководства. Что сделано, вы могли бы реализовать polling system который периодически пингует пользователя, чтобы проверить его / ее присутствие. Например, вы могли бы сделать на стороне клиента Ajax script который пингует сайт с фиксированными интервалами, чтобы продлить активный сеанс пользователя. Если пользователь больше не пингует сайт, после истечения временного окна, установите его / ее status = 0, Это просто идея. Попробуйте поискать больше о Google.


Вариант: вы можете установить cookie с языка сервера и связать сеанс с этим cookie. Итак, дайте ему короткое время истечения. Затем создайте клиентский скрипт, который периодически отправляет скрытый запрос на сервер. Когда сервер получает запрос, он снова переписывает cookie, поэтому новое время будет начинаться заново с самого начала.

Другие вопросы по тегам