Я использую ActionFilter, чтобы проверить, является ли сеанс пользователя самым последним сеансом для этого пользователя. Если они вошли в систему с другим сеансом, старый сеанс недействителен. Итак, я проверяю каждое действие по мере его вызова и выхожу из него, если они не используют самый последний сеанс. Проблема, с которой я столкнулся, заключается в том, что мой подход не работает с вызовами AJAX. Нормальные вызовы GET или POST работают нормально.
public class DuplicateLoginFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var user = Membership.GetUser(HttpContext.Current.User.Identity.Name);
if (user != null)
{
if (!PortalDA.GetUserSession(user.UserName).Trim().Equals(HttpContext.Current.Session.SessionID))
{
FormsAuthentication.SignOut();
filterContext.Result = new RedirectResult(@"\Home\SessionExprired");
}
}
base.OnActionExecuting(filterContext);
}
Думаю, моя самая большая проблема в решении этой проблемы заключается в том, что я получаю сообщение об ошибке, но нигде не могу ее найти.
У меня есть специальные ошибки, включенные в webconfig. Я переопределяю событие OnException на всех своих контроллерах. Я также отменяю событие Application_Error в global.asax.
Я прошел через код, когда я делаю вызов AJAX, я возвращаю представление SessionExpired. Но где-то после этого возникает ошибка, и я не могу двигаться дальше. Ошибка никогда не перехватывается в событиях ошибки, которые были переопределены. И меня отправляют на страницу пользовательской ошибки.
Я подозреваю, что это как-то связано с HTTPHeaders, но я недостаточно разбираюсь в них, чтобы знать, как это исправить, если это вызов AJAX.
Спасибо!