Предотвращение многократного входа в систему с одинаковыми учетными данными

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

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

Какой может быть лучший подход: -

1) должен ли я хранить сеанс пользователя, учетные данные и IP-адрес машины в БД.

2) должны ли мы использовать механизм отслеживания сеансов в самом приложении. Если да, то каков наилучший подход?

Кроме того, мы должны помнить о следующих вещах:

1) Если пользователь закрывает браузер без выхода из системы.

2) Если время сеанса истекло.

Надеюсь, это прояснит вопрос.


person Manish Sahni    schedule 31.08.2013    source источник


Ответы (2)


Попадания в базу данных Besdies (что может привести к сбою, если ваш сервер отключится без обновления базы данных): способ, дружественный к базе данных, - не попадать в базу данных при каждом повторном входе в систему, иначе вы можете получить атаки типа «отказ в обслуживании», которые могут привести к провалу. Вместо этого реализуйте прослушиватель сеанса в J2EE и проверьте, вошел ли тот же пользователь, просматривая идентификатор пользователя в кеше.

Если у вас есть более одного узла приложения, вам нужен распределенный кеш со временем ожидания, таким же, как время ожидания сеанса в web.xml.

person tgkprog    schedule 31.08.2013
comment
спасибо @tgkprog, какой тип списка сервлетов лучше всего подходит для отслеживания этого? - person Manish Sahni; 31.08.2013
comment
' Session Listener' Это интерфейс, я думаю, его нужно реализовать. не знаю из коробки / бесплатное ПО. но мог поискать в гугле - person tgkprog; 31.08.2013

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

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

$check= "onlineCheck.txt";
$fh = fopen($check, 'a') or die("can't open file");
$nowOnline= "USER678 \n";
fwrite($fh, $nowOnline);
person alex    schedule 31.08.2013
comment
Есть ли у них какие-либо подходы к отслеживанию в самом приложении. - person Manish Sahni; 31.08.2013
comment
Итак, в основном, что вы говорите, что вы предпочли бы не использовать базы данных? - person alex; 31.08.2013
comment
я бы попытался добиться этого в самом веб-приложении без использования БД. - person Manish Sahni; 31.08.2013
comment
Что ж, лучший способ сделать это — сохранить онлайн-пользователей в текстовом файле и проверить этот текстовый файл, и если они в нем есть, не разрешать вход в систему, потому что они уже вошли в систему. - person alex; 31.08.2013
comment
посмотри мой новый ответ - person alex; 31.08.2013
comment
спасибо @roastbeef .. но я использую сервлеты в веб-приложении .. извините, я не знаю синтаксис PHP - person Manish Sahni; 31.08.2013