ASP.NET предотвращает вход одного и того же пользователя несколько раз - PullRequest
1 голос
/ 14 июня 2011

У меня есть требование для веб-приложения ASP.NET, согласно которому один и тот же пользователь не может входить в систему несколько раз. Я думаю, что это мешает людям делиться именами пользователей и паролями.

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

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

Кто-нибудь может придумать лучший способ справиться с этим?

Ответы [ 3 ]

6 голосов
/ 14 июня 2011

Если вы используете ASP.NET MembershipProvider, вы можете сделать что-то вроде этого:

    protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e)
    {
        if (Membership.ValidateUser(Login1.UserName, Login1.Password))
        {
            int time = Membership.UserIsOnlineTimeWindow;

            MembershipUser user = Membership.GetUser(Login1.UserName, true);
            if (user != null)
            {
                if (user.IsOnline)
                {
                    lblMessaggeIsOnLine.Visible = true;
                    e.Cancel = true;
                }
                else
                    lblMessaggeIsOnLine.Visible = false;
            }
        }
    }
1 голос
/ 14 июня 2011

Вы правы.Вам необходимо управлять входами пользователей и действовать соответственно.Позвольте мне узнать, используете ли вы свой собственный поставщик или поставщик ASP.NET.У провайдера по умолчанию есть несколько опций.

1 голос
/ 14 июня 2011

вы можете использовать событие SessionEnd в global.asax, если ваш режим состояния сеанса не SqlServer.

например:

ваша конфигурация:

<sessionState timeout="15"></sessionState>

через 15 минут ваше сессионное событие сработало, и вы можете выйти из системы

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