Мы используем вызов Ajax во всем приложении, пытаясь найти глобальное решение для перенаправления на страницу входа, если сеанс уже истек, при попытке выполнить любой запрос Ajax. Я написал следующее решение, воспользовавшись помощью этого сообщения - Обработка тайм-аута сеанса в вызовах ajax
НЕ УВЕРЕН, ПОЧЕМУ В МОЕМ СОБЫТИИ ПО УХОДУ "HandleUnauthorizedRequest" не запускается.
Настраиваемый атрибут:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class CheckSessionExpireAttribute :AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
var url = new UrlHelper(filterContext.RequestContext);
var loginUrl = url.Content("/Default.aspx");
filterContext.HttpContext.Session.RemoveAll();
filterContext.HttpContext.Response.StatusCode = 403;
filterContext.HttpContext.Response.Redirect(loginUrl, false);
filterContext.Result = new EmptyResult();
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}
Использование настраиваемого атрибута выше, как показано в действии контроллера:
[NoCache]
[CheckSessionExpire]
public ActionResult GetSomething()
{
}
Вызов AJAX (часть JS):
function GetSomething()
{
$.ajax({
cache: false,
type: "GET",
async: true,
url: "/Customer/GetSomething",
success: function (data) {
},
error: function (xhr, ajaxOptions, thrownError) {
}
}
Настройки аутентификации Web Config:
<authentication mode="Forms">
<forms loginUrl="default.aspx" protection="All" timeout="3000" slidingExpiration="true" />
</authentication>
Я пытаюсь проверить это, удалив приготовление в браузере перед вызовом ajax, но событие «CheckSessionExpireAttribute» не запускается - любая идея, пожалуйста.
Спасибо,
@Павел
.ASPXAUTH
cookie перед отправкой запроса? - person shakib   schedule 21.09.2017Session
используется для хранения переменной между запросами конкретного пользователя либо в памяти веб-сервера, либо в каком-либо другом механизме постоянного хранения. Конечному пользователю обычно выдается файл cookie сSession Id
. Cookie-файл аутентификации (или токен) обычно представляет собой зашифрованный cookie-файл, в котором хранится время истечения срока выхода из системы и ваш идентификатор пользователя или имя пользователя. Веб-сервер использует это, чтобы убедиться, что вы являетесь аутентифицированным пользователем и авторизованы для сделанного вами запроса. У вас может быть только сеанс, только авторизация, ни то, ни другое. Они полностью независимы друг от друга. - person Tommy   schedule 26.09.2017startup.cs
(stackoverflow.com/questions/27027748/). Наконец, вот обсуждение SO-ответа на эту тему - stackoverflow.com/questions/17812994/ - person Tommy   schedule 26.09.2017error: function (xhr, ajaxOptions, thrownError) { if(xhr.status === 403){ location.href = '/Default.aspx' } }
удалитеfilterContext.HttpContext.Response.Redirect(loginUrl, false);
, который не будет иметь никакого эффекта - person Nilesh   schedule 27.09.2017