Сессия пуста в HttpHandler, но не в контроллере MVC - PullRequest
1 голос
/ 20 ноября 2011

У меня есть защита в моем приложении MVC, настроенная с атрибутом авторизации ...

public class UserLoggedInAttribute : AuthorizeAttribute 
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Session["UserId"] == null)
            {
                var values = new { controller = "Home", action = "Index" };
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(values));
            }
        }

    }

Тогда у меня также есть .ashx HttpHandler, который вызывается элементом управления загрузкой jQuery ....

public class UploadFile : IHttpHandler, IReadOnlySessionState
    {

...

private bool EnsureSecureTransaction(HttpContext context)
        {
            if (context.Session["UserId"] == null)
            {
                return false;
            }
            else
            {
                return true;
            }

            return true;
        }

}

Когда вызывается EnsureSecureTransaction (), сессия возвращается в ноль.Но сеанс, который читается в моем действии MVC его нет.Я заметил, что я беру сеанс из filterContext, хотя.

Я попытался изменить весь код, чтобы попытаться сослаться на HttpContext.Current.Session следующим образом

[HttpPost]
        public ActionResult Logon(AdminModel model)
        {

            if (model.UserName == "x" && model.Password == "x")
            {
                HttpContext.Session["UserId"] = "true";

                return RedirectToAction("CreateBlog", "Blog");

            }


            return View;
        }


        private bool EnsureSecureTransaction(HttpContext context)
        {
            if (context.Session["UserId"] == null)
            {
                return false;
            }
            else
            {
                return true;
            }

            return true;
        }

Но в основном, когда я нажимаю на блок EnsureSecureTransaction (), он все еще говорит о моем сеансе [«UserId»] имеет значение null и поэтому неправильно проверяет подлинность вызова в файле .ashx.

Кто-нибудь знает, почему это так?Какова реальная разница между AuthorizationContext и HttpContext в отношении сеанса, который они несут, и как мне обойти эту проблему?

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