Всегда получать перенаправлены на страницу SessionTimeOut ASP.net MVC - PullRequest
1 голос
/ 21 октября 2011

Я использую SessionExpireFilter для каждого действия, чтобы проверить, истек ли сеанс или нет. Если сессия истекла, он перенаправляет пользователя на sessionTimeoutPage, то есть на membersController и SessionTimeOut View

Фильтр выглядит как -

 public class SessionExpireFilterAttribute : ActionFilterAttribute
{
    /// <summary>
    /// Called when [action executing].
    /// </summary>
    /// <param name="filterContext">The filter context.</param>
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpContext ctx = HttpContext.Current;

        // check if session is supported
        if (ctx.Session != null)
        {
            // check if a new session id was generated
            if (ctx.Session.IsNewSession)
            {
                // If it says it is a new session, but an existing cookie exists, then it must
                // have timed out
                string sessionCookie = ctx.Request.Headers["Cookie"];
                if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))
                {
                    if (ctx.Request.IsAuthenticated)
                    {
                        FormsAuthentication.SignOut();
                    }

                    //HttpCookie mycookie = new HttpCookie("ASP.NET_SessionId");
                    //mycookie.Expires = DateTime.MinValue;
                    //ctx.Response.Cookies.Add(mycookie);
                    //ctx.Session.Clear();

                    RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
                    redirectTargetDictionary.Add("action", "SessionTimeOut");
                    redirectTargetDictionary.Add("controller", "Membership");
                    filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary);

                }
            }
        }

        base.OnActionExecuting(filterContext);
    }
}

Проблема в том, что у меня есть метод действия входа в систему контроллера членства, который также имеет этот фильтр. Он проверяет истечение сеанса и всегда находит файл cookie ASP.NET_SessionId и перенаправляет на страницу sessionTimeout (которая имеет ссылку на страницу входа) снова и снова

Было бы здорово, если бы кто-то мог помочь.

1 Ответ

0 голосов
/ 21 октября 2011

Чтобы это решение работало, вам нужно подключить событие Session_Start в Global.asax.Если вы этого не сделаете, Session.IsNewSession всегда будет истинным (именно так работает среда выполнения ASP.NET).Иногда также необходимо что-то хранить (что угодно) в сеансе.

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