Ограничить число пользователей, обращающихся к веб-приложению ASP .NET - PullRequest
7 голосов
/ 08 апреля 2009

Как ограничить количество пользователей веб-приложением.

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

Я видел несколько предложений о том, что вы можете пометить учетную запись пользователя как «LoggedIn = True», когда пользователь вошел в систему. Затем при каждой новой успешной попытке входа в систему проверяется количество записей «LoggedIn = True». Если он превышает лимит, пользователь отклоняется.

Как будет обрабатываться неожиданный ввод в этом случае? Что делать, если:

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

Все вышеперечисленное все равно будет иметь установленный флаг "LoggedIn = True" и будет влиять на количество вошедших в систему пользователей. Это может непреднамеренно заблокировать подлинных аутентифицированных пользователей.

Если возможно, я ищу больше решений для ASP.NET.

Ответы [ 3 ]

4 голосов
/ 08 апреля 2009

Если ваша аутентификация пользователя каким-то образом основана на сеансе, то ответом на все ваши "неожиданные" случаи (которые на самом деле будут нормой - люди редко выходят из веб-приложений) будет то, что эти пользовательские слоты станут свободными, когда время сеанса истекло. Таким образом, вам необходимо изучить модели использования вашего приложения. Если многие люди входят в систему в течение пары минут, но не более того, то 30-минутный тайм-аут сеанса будет означать, что очень немногие люди действительно смогут использовать приложение.

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

1 голос
/ 08 апреля 2009

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

Вы можете применить это, поместив асинхронный запрос в стиле ajax, вызванный таймером, который запускается при загрузке страницы. Например, если вы предполагаете, что все активные пользователи будут делать по крайней мере 1 запрос каждые 5 минут, то каждая страница будет запрашивать пустую (но без кэширования) страницу каждые 4 минут. Таким образом, если у них открыто окно браузера, у вас всегда будет активность от этого пользователя. Опять же, это обрабатывается асинхронными запросами, а не какой-либо директивой перезагрузки. Это делает его абсолютно прозрачным для пользователя.

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

0 голосов
/ 08 апреля 2009

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

Возможным решением было бы сохранить малое время ожидания сеанса (скажем, 1 или 2 минуты) и использовать функцию обратного вызова, чтобы сохранить сеанс живым для незанятых пользователей. Затем вы можете увеличить счетчик в Session_Start, уменьшить его в Session_End и использовать для отслеживания количества активных сеансов. Если количество активных сеансов выходит за пределы вашего предела, вы перенаправляете нового пользователя на страницу, которая покидает сеанс и сообщает пользователю, что в данный момент у вас слишком много посетителей.

...