ASP.NET MVC 3 определяет состояние сеанса (новый или тайм-аут) - PullRequest
4 голосов
/ 22 ноября 2011

В настоящее время я использую метод проверки подлинности по умолчанию для моего приложения ASP.NET MVC.

выше всех моих методов действия, требующих проверки подлинности, у меня есть этот атрибут

[Authorize()]

Когда кто-то пытаетсяНазовите страницу, которую этот метод действия "обслуживает", и они еще не вошли в систему, она отправляет их на страницу входа ... отлично!Однако, если время их сеанса истекло, и они пытаются перейти на эту страницу, они также просто перенаправляются на страницу входа без указания причины.Я хотел бы иметь возможность определить, является ли это новым визитом, или это время ожидания, и отобразить другое сообщение на экране входа в систему соответствующим образом.

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Посмотрите на этот пользовательский атрибут авторизации, который я сделал. Он должен был реализовать некоторую пользовательскую авторизацию на основе ролей, но вы также можете заставить ее работать на себя. Существует свойство Session.IsNewSession, которое вы можете проверить, имеет ли место этот запрос для нового сеанса.

public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (httpContext.User.Identity.IsAuthenticated)
            {
                httpContext.User = new GenericPrincipal(httpContext.User.Identity, AdminUserViewModel.Current.SecurityGroups.Select(x => x.Name).ToArray());
            }
            return base.AuthorizeCore(httpContext);
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                filterContext.Result = new RedirectResult("/Authentication/NotAuthorized", false);
            }
            else
            {
                if (filterContext.HttpContext.Session.IsNewSession)
                {
                    // Do Something For A New Session
                }
                base.HandleUnauthorizedRequest(filterContext);
            }
        }
    }
0 голосов
/ 22 ноября 2011

При входе в систему вы можете установить cookie, привязанный к сеансу браузера.Если этот файл cookie существует, вы знаете, что время сеанса истекло.Если нет, то вы знаете, что это новый визит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...