Я использую 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 View. Но где-то после этого происходит ошибка, и я не могу идти дальше. Ошибка никогда не обнаруживается в событиях ошибки, которые были переопределены. И меня отправляют на пользовательскую страницу ошибок.
Я подозреваю, что это как-то связано с HTTPHeaders, но я недостаточно разбираюсь в них, чтобы знать, как это исправить, если это AJAX-вызов.
Спасибо!