Эффективным способом обработки истечения сеанса является создание настраиваемого атрибута авторизации и возврат ответа HTTP 403 , если сеанс истек и имел дело с запросом ajax.
Комусоздайте атрибут авторизации с поддержкой Ajax, который вы можете наследовать от AuthorizeAttribute , и переопределите событие HandleUnauthorizedRequest проверкой типа запроса, например. IsAjaxRequest ()
public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
// Fire back an unauthorized response
filterContext.HttpContext.Response.StatusCode = 403;
}
else
base.HandleUnauthorizedRequest(filterContext);
}
}
Затем просто украсьте свои контроллеры или действия атрибутом AjaxAuthorize, как вы это обычно делаете с Authorize
[AjaxAuthorize(Roles = "1,2,3,4,5")]
public class HomeController
{
Тогда, если выИспользуя jQuery, вы можете обработать ответ 403, создав глобальный обработчик ошибок ajax.
$.ajaxSetup({
error: function (x, e) {
if (x.status == 403) {
alert("Sorry, your session has expired. Please login again to continue");
window.location = "/login";
}
}
});