У нас есть внутреннее приложение ASP.NET MVC, для которого требуется вход в систему. Вход в систему отлично работает и делает то, что ожидается. У нас заканчивается сеанс продолжительностью 15 минут. После сидения на одной странице за этот период времени пользователь потерял сеанс. Если они попытаются обновить текущую страницу или перейти к другой, они получат страницу входа в систему. Мы сохраняем их запрос, поэтому, как только они вошли в систему, они могут продолжить работу на запрошенной странице. Это отлично работает.
Однако моя проблема в том, что на некоторых страницах есть вызовы AJAX. Например, они могут заполнить часть формы, скинуться и допустить, чтобы их сеанс закончился. Когда они вернутся, экран все еще отображается. Если они просто заполнит поле (которое вызовет AJAX), вызов AJAX вернет страницу входа в систему (внутри любого div AJAX должен просто вернуть фактические результаты). Это выглядит ужасно.
Я думаю, что решение состоит в том, чтобы сделать страницу самой последней (так что, когда сеанс завершается, они автоматически возвращаются на экран входа в систему без каких-либо действий с ними). Тем не менее, мне интересно, есть ли мнения/идеи о том, как лучше всего реализовать это специально в отношении лучших практик в ASP.NET MVC.
Обновление:
Итак, я пошел вперед и реализовал это в своем OnActionExecuting
(по предложению Keltex)
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.Write("Invalid session -- please login!");
filterContext.HttpContext.Response.End();
}
else
{
...
}
}
Это определенно улучшает ситуацию - теперь, даже если у них есть две вкладки (одна с некоторыми вызовами AJAX, которые они могут запускать), и они явно выходят из системы на второй вкладке, они немедленно получат что-то, что имеет больше смысла, чем куча закрученных данных AJAX.
Я все еще думаю, что я буду использовать обратный отсчет Javascript, а также предложить матку.