У нас есть внутреннее приложение 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, который предложила womp.