Обнаружение тайм-аута аутентификации с помощью форм на странице входа

Если у вас есть настройка проверки подлинности с помощью форм для перенаправления на login.aspx при доступе к защищенной странице, какой хороший способ определить в login.aspx, был ли пользователь отправлен туда, потому что он еще не вошел в систему, или потому что его билет проверки подлинности форм является истекший? Я хочу отобразить сообщение «Истекло время ожидания».

(Я не упоминаю слово сеанс в этом вопросе, потому что ASP.NET рассматривает их так отчетливо, однако, если есть хорошее решение, которое включает сеанс, я все уши)

Раньше я решал эту проблему, задавая еще одну функцию «hasloggedin», когда пользователь входит в систему, а затем проверяет, существует ли она, чтобы определить, истек ли это время, и затем отображать соответствующее сообщение. Но, должно быть, это обычная проблема?


person RyanW    schedule 29.08.2009    source источник
comment
Ваш метод cookie кажется хорошим способом сделать это. Если вы уже используете переменные сеанса (в зависимости от их относительного значения тайм-аута по отношению к таймауту аутентификации), вы можете проверить Page.Session.IsNewSession, чтобы узнать, был ли сеанс создан с текущим запросом.   -  person JustinStolle    schedule 02.10.2010


Ответы (1)


При проверке подлинности с помощью форм автоматически добавляется параметр URL-адреса ReturnURL, указывающий, какая страница (если есть) инициировала перенаправление на страницу входа. Большинство веб-сайтов имеют в качестве страницы по умолчанию «Default.aspx» или «index.html» и т. Д. Вы можете проверить ReturnURL, чтобы узнать, содержит ли он страницу по умолчанию или какую-либо другую страницу в вашем приложении.

ПРИМЕР:

string refererURL;
if (page.Request.QueryString["ReturnURL"] != null)
{
    refererURL = page.Request.QueryString["ReturnURL"].ToString();
}

//Check to see if user was redirected because of Timeout or initial login
//Where "Default.aspx" is the default page for your application
if (refererURL != "" && refererURL != (ResolveUrl("~") + "Default.aspx"))
{
    //Show HTML etc showing session timeout message 
}
else // User redirected here to to initial login
{
    //Show HTML showing initial login HTML message etc
}
person PortageMonkey    schedule 30.08.2009
comment
Хорошая идея. Это может отлично работать для моего текущего приложения, но для других, которые я делал, на анонимных страницах были ссылки на страницы, требующие аутентификации, и поэтому returnurl недостаточно, чтобы отличить тайм-аут или первую попытку защищенный возраст. Но я думаю, что это должно работать во многих случаях, и объединение этого с просмотром фактического значения returnurl должно сделать его еще лучше. Спасибо за ответ. - person RyanW; 31.08.2009