Мое приложение позволяет администратору приостанавливать/не приостанавливать учетные записи пользователей. Я делаю это со следующим кодом:
MembershipUser user = Membership.GetUser(Guid.Parse(userId));
user.IsApproved = false;
Membership.UpdateUser(user);
Вышеупомянутое хорошо работает для приостановки пользователя, но оно не отменяет их сессию. Следовательно, временно отстраненный пользователь может остаться с доступом к приложению, пока их сеансовые куки остаются. Любой фиксирует /
При использовании аутентификации с помощью форм:
FormsAuthentication.SignOut();
Не существует способа покинуть сессию "извне" сессии. Вам придется проверять базу данных при каждой загрузке страницы, и если учетная запись была отключена, то выходить из сеанса. Этого можно добиться, используя HttpModule, что сделает все немного чище.
Например:
public class UserCheckModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(OnPreRequestHandlerExecute);
}
public void Dispose() {}
private void OnPreRequestHandlerExecute(object sender, EventArgs e)
{
// Get the user (though the method below is probably incorrect)
// The basic idea is to get the user record using a user key
// stored in the session (such as the user id).
MembershipUser user = Membership.GetUser(Guid.Parse(HttpContext.Current.Session["guid"]));
// Ensure user is valid
if (!user.IsApproved)
{
HttpContext.Current.Session.Abandon();
FormsAuthentication.SignOut();
HttpContext.Current.Response.Redirect("~/Login.aspx?AccountDisabled");
}
}
}
Это не полный пример, и метод получения пользователя с помощью ключа, хранящегося в сессии, нужно будет адаптировать, но это должно помочь вам начать. Это потребует дополнительной проверки базы данных при каждой загрузке страницы, чтобы убедиться, что учетная запись пользователя все еще активна, но другого способа проверить эту информацию нет.
На какой-нибудь распространенной странице проверьте, действительна ли учетная запись, и, если она была отозвана, вызовите Session.Abandon ()
.
Править (Просто заметил, что это все еще открыто.)
Я знаю, что это работает, потому что я это делаю.
На главной странице проверьте статус учетной записи. Это означает, что при каждой навигации у вас есть возможность выйти из системы.
(Final) Edit
Не думайте об этом как о «Я завершаю их сеанс», думайте об этом как о «их сеанс завершается сам собой».