FormsAuthentication и MembershipProviders - это две совершенно разные вещи, и все же они созданы для очень хорошей работы друг с другом.Если вы написали постоянный файл cookie [«Запомнить меня»], то в следующий раз вы можете просто позвонить Membership.GetUser()
, который вернет вам экземпляр MembershipUser
текущего пользователя, вошедшего в систему, или null
, если пользователь не вошел в систему.
Таким образом, когда пользователь впервые приходит и аутентифицируется с помощью «Запомнить меня», вы должны написать постоянный файл cookie следующим образом.
FormsAuthentication.RedirectFromLoginPage(strUserName, true);
Предполагается, что пользователь не выходит из системы, покидает веб-страницу и возвращается послекогда-то.Вы можете просто вызвать MembershipUser.GetUser () следующим образом и проверить, не вошел ли пользователь в постоянный файл cookie, написанный FormsAuthentication.
MembershipUser someUser = Membership.GetUser();
if(someUser == null)
{
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
}
else
{
//Take where logged in users go.
}
Вы можете сделать эту проверку на самой странице входа или главной целевой странице.перехватить учетную запись пользователя, чтобы проверить, нужно ли ему сменить пароль или учетная запись отключена, как в вашем случае.
РЕДАКТИРОВАТЬ
Есть два способа сделать это.
1.) Проверьте аутентификацию, как упомянуто выше в событии Session_Start в global.asax, и установите ключ сеанса, который станет доступным на всех страницах для этого конкретного сеанса.
2.) Другим способом является также сохранение общегообщий класс PageBase приложения, который наследуется от System.Web.UI.Page и действует как базовый класс страниц для всех ваших страниц asp.net.На странице Загрузка общего класса PageBase проверьте аутентификацию, как указано выше.В этом случае вам придется тщательно написать условное перенаправление, поскольку это может привести к бесконечному перенаправлению без конца, так как оно будет выполняться на Page_Load всей страницы из общего класса PageBase.
public class PageBase : System.Web.UI.Page
{
/// <summary>
/// Initializes a new instance of the Page class.
/// </summary>
public Page()
{
this.Load += new EventHandler(this.Page_Load);
}
private void Page_Load(object sender, EventArgs e)
{
try
{
AuthenticateUser();
}
catch
{
//handle the situation gracefully.
}
}
private AuthenticateUser()
{
MembershipUser someUser = Membership.GetUser();
if(someUser == null)
{
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
}
else
{
//Take where logged in users go.
}
}
}
//in your asp.net page code-behind
public partial class contact : PageBase
{
protected void Page_Load(object sender, EventArgs e)
{
}
}