Проверка входа в ASP.NET AJAX ... отменить загрузку страницы? - PullRequest
0 голосов
/ 07 июля 2011

У меня есть следующая проблема:

В моем web.config у меня есть следующие настройки авторизации:

<authentication mode="Forms">
    <forms loginUrl="~/LogIn" timeout="2880" name=".ASPXFORMSAUTH" defaultUrl="~/Dashboard/Dashboard.aspx"/>
</authentication>

Код, который я унаследовал от предыдущей разработки, сохраняет пользовательский объект в Session после входа в систему. Я планирую и дальше использовать эту логику.

Теперь пользователь переходит на страницу. Cookie создается при входе в систему, а информация о пользователе сохраняется в сеансе. Теперь пользователь закрывает вкладку страницы, но держит браузер открытым. Пользователь ожидает x времени, в течение которого сеанс истекает, но не cookie. Теперь пользователь пытается перейти непосредственно на страницу, на которой он был ранее. Проверка подлинности форм предполагает, что они вошли в систему, но это не так. Таким образом, мой вошедший в систему пользователь имеет значение null.

Я пытаюсь сделать это:

protected void Page_Init(object sender, EventArgs e)
{
    if (object.Equals(DashboardSessionRepository.Instance.LoggedInUser, null))
    {
        FormsAuthentication.SignOut();
        FormsAuthentication.RedirectToLoginPage();
    }
    else
    {
        //Continue with page init
    }
}

К сожалению, это не приводит к тому, что текущая страница отменяет свой жизненный цикл.

Мне интересно несколько вещей:

  • Как этот сценарий правильно обрабатывается в поле?
  • Является ли это приемлемым решением, если не правильным?
  • Есть ли способ не позволить себе проверять, является ли LoggedInUser нулевым во время остальных событий жизненного цикла моей страницы (загрузка страницы, pageloadcomplete)? Я предполагаю, что мог бы установить AutoWireEvents в false, но подключение моего собственного жизненного цикла кажется более неправильным.

Спасибо

1 Ответ

1 голос
/ 07 июля 2011

К сожалению, это не приводит к тому, что текущая страница отменяет свой жизненный цикл.

Если вы хотите остановить жизненный цикл, просто поместите End после RedirectToLoginPage ... как

if (object.Equals(DashboardSessionRepository.Instance.LoggedInUser, null))
{
    FormsAuthentication.SignOut();
    FormsAuthentication.RedirectToLoginPage();
    Response.End();
    return;
}
else
...