Как ограничить пользователей для входа? - PullRequest
0 голосов
/ 21 июня 2009

У меня есть сценарий, в котором я должен ограничить пользователей для входа в систему согласно следующим деталям:

Каждый раз, когда 500-й пользователь пытается войти в систему, на моем веб-сайте появляется сообщение «Вход пользователя в систему превышает, пожалуйста, войдите позже!» .

Только 499 пользователей могут войти одновременно, 500-й пользователь - Администратор. Также необходимо показать онлайн-пользователей в просмотре страницы администратора. Итак, как рассчитать логин пользователей и ограничить число до 500.

Пожалуйста, предоставьте ответы, связанные с aps.net C #

Ответы [ 6 ]

2 голосов
/ 22 июня 2009

Я думаю, что это подходит для обработки контекста приложения.

Только не сохраняйте эти вещи в MS SQL, потому что они потрачены впустую на подключение к базе данных.

Самый простой подход - создать одноэлементный объект для хранения данных о количестве онлайн-пользователей. Этот объект может быть создан в событии Application_Start

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

0 голосов
/ 21 июня 2009

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

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

В моем программном обеспечении для онлайн-банкинга это что-то вроде 90 или 120 секунд (более высокая безопасность), в amazon.com это по крайней мере несколько часов (лучший опыт работы с клиентами). Как долго вы устанавливаете это время ожидания, зависит от особых требований вашего приложения.

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

0 голосов
/ 21 июня 2009

В asp.net вы можете добавить файл с именем global.asax. Этот файл содержит события уровня приложения, включая Session_Start и Session_End. Это позволит легко отслеживать сеансы, используете ли вы базу данных для этого или нет.

0 голосов
/ 21 июня 2009

Есть несколько способов сделать это.

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

Другой способ выполнить задачу, которую вы ищете, - пометить пользователя в вашей пользовательской таблице в новом поле, скажем, «logged_in».

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

Лучшим способом было бы вести подсчет в БД общего количества зарегистрированных пользователей, складывая и вычитая, в зависимости от того, какие методы "login" или "logout" выполняются. Таким образом, вы не будете знать, какие конкретные пользователи вошли в данный момент, но у вас будет по крайней мере общее количество, которое вам нужно. Этот метод лучше, потому что вам не нужно будет выполнять запрос SELECT для всей пользовательской таблицы, вместо этого вы можете получить значение одного конкретного поля из вашей БД, что повысит производительность. К сожалению, если они не выходят из системы каждый раз, этот метод бесполезен, если только вы не сохраните их время входа и не выйдете через определенный промежуток времени.

Чтобы попытаться решить проблему, заключающуюся в том, что пользователь может закрыть браузер, а не «выходить из системы», вы можете в любом случае сохранить сеансы, используя комбинацию структуры БД, предложенной мной выше.

0 голосов
/ 21 июня 2009

Если у вас есть хорошо работающая СУБД (и хорошая сеть), вы можете зарегистрировать в таблице эту информацию ... но если это дорого, просто используйте некоторые классы, предоставляемые вашей серверной технологии (Session, Application и т. Д.) ,

С JS это невозможно сделать. Где вы хранили эту информацию глобально (переменная счетчика)?

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

Кроме того, если вы хотите использовать файлы cookie, помните, что файлы cookie относятся только к клиенту, на котором они используются.

0 голосов
/ 21 июня 2009

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

Я предполагаю, что есть способ сделать это в ASP.

...