Как узнать, что учетная запись пользователя уже вошла в систему с помощью проверки подлинности с помощью форм ASP.Net?

Наш процесс входа в систему единого входа использует проверку подлинности с помощью форм для пользовательского хранилища в SQL Server.

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

Есть ли простой способ сделать это с помощью проверки подлинности с помощью форм? Мы рассмотрели индивидуальный подход, при котором мы отслеживаем каждый сеанс в базе данных, но это потребует много работы, и нам, вероятно, придется изменить все наши приложения для обнаружения session_end, чего я надеюсь избежать. Я полагаю, что в Forms Auth должно быть что-то, что справляется с этим.

Я видел метод MembershipUser.IsOnline (), который кажется идеальным, но мы не используем поставщика членства.

ОБНОВЛЕНИЕ: для ясности, мне не нужно проверять, вошел ли текущий пользователь в систему, мне нужно знать, вошел ли уже кто-то еще с той же учетной записью.


person Raelshark    schedule 05.02.2009    source источник
comment
Это было некоторое время назад, но я вижу, что это стало важным вопросом, поэтому я поделюсь своим решением - в итоге мы применили индивидуальный подход в соответствии с тем, что Kb. предлагается, в основном отслеживая активность пользователей в базе данных. Для каждого пользователя мы сохраняем дату последнего входа в систему и ключ сеанса. Ключ был сгенерирован и сохранен, когда пользователь вошел в систему, затем мы проверяли текущий ключ на каждой странице. Если ключ текущего пользователя когда-либо не совпадал с ключом в базе данных, мы аннулировали его сеанс и немедленно вывели его из системы.   -  person Raelshark    schedule 29.10.2011


Ответы (3)


Если я правильно понял, вам нужно будет сохранить последнее состояние активности на основе идентификатора пользователя.
Membership.IsOnline () реализуется путем проверки LastActivityDate сохраняется в базе данных членства.
Итак, где-то вам нужно будет отслеживать пользователя Activity.
Вы могли бы реализовать httpmodule, который обновляет временную метку для активности пользователя.

person Kb.    schedule 05.02.2009
comment
Хм, httpmodule - интересная идея. Я займусь этим. - person Raelshark; 05.02.2009

Попробуй это:

System.Web.HttpContext.Current.User.Identity.IsAuthenticated
person Andrew Hare    schedule 05.02.2009

Если свойство HttpContext.Current.User не равно нулю, они вошли в систему. И Identity.IsAuthenticated истинно.

person Nick Berardi    schedule 05.02.2009