Программно выйдите из системы пользователь ASP.NET

Мое приложение позволяет администратору приостанавливать/не приостанавливать учетные записи пользователей. Я делаю это со следующим кодом:

MembershipUser user = Membership.GetUser(Guid.Parse(userId));
user.IsApproved = false;
Membership.UpdateUser(user);

Вышеупомянутое хорошо работает для приостановки пользователя, но оно не отменяет их сессию. Следовательно, временно отстраненный пользователь может остаться с доступом к приложению, пока их сеансовые куки остаются. Любой фиксирует /

24
задан Cœur 26 April 2017 в 17:17
поделиться

3 ответа

При использовании аутентификации с помощью форм:

FormsAuthentication.SignOut();
6
ответ дан 28 November 2019 в 23:42
поделиться

Не существует способа покинуть сессию "извне" сессии. Вам придется проверять базу данных при каждой загрузке страницы, и если учетная запись была отключена, то выходить из сеанса. Этого можно добиться, используя 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");
        }
    }
}

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

27
ответ дан 28 November 2019 в 23:42
поделиться

На какой-нибудь распространенной странице проверьте, действительна ли учетная запись, и, если она была отозвана, вызовите Session.Abandon () .

Править (Просто заметил, что это все еще открыто.)

Я знаю, что это работает, потому что я это делаю.

На главной странице проверьте статус учетной записи. Это означает, что при каждой навигации у вас есть возможность выйти из системы.

(Final) Edit

Не думайте об этом как о «Я завершаю их сеанс», думайте об этом как о «их сеанс завершается сам собой».

1
ответ дан 28 November 2019 в 23:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: