Только один пользователь вошел в систему одновременно

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

Что я сделал, когда пользователь вошел в систему, я вошел в ее статус в таблице журнала, как вошел в систему, и когда она вышла из системы, я обновляю этот статус.

Возникает проблема: что, если она не вышла из системы и просто закрыла браузер?

Любая помощь или улучшение будут оценены заранее:-) Я использую codeigniter в качестве внутреннего инструмента.

2 ответа

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

Ну, маленький намек. Использовать Servlet Filter, скажем AuthFilter, и выполнить проверку, может быть isAlreadyLoggedIn (), помимо других проверок, таких как имя пользователя / пароль и т. Д. Теперь, после этой проверки, вы либо - что это зависит от того, что вы хотите сделать с пользователем, пытающимся войти в систему, показать сообщение, что "пользователь уже вошел в систему",

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

Вы попросили способ определить, закрыл ли пользователь браузер - существует событие onavload javascript, которое в большинстве случаев будет срабатывать, если пользователь закрыл окно браузера. Однако он не будет срабатывать при аварийном отключении или отключении javascript, поэтому он не очень надежен.

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

Кроме того, наличие некоторого времени ожидания уменьшает изменения атак фиксации сеанса.

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