会话在HttpHandler中为空,但在MVC控制器中不为空

时间:2011-11-19 20:08:40

标签: asp.net-mvc asp.net-mvc-3 session

我的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()时,会话将返回null。但是在我的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()块时,它仍然说我的Session [“UserId”]为空,因此不能正确识别对.ashx文件的调用。

任何人都知道这是为什么?什么是AuthorizationContext和HttpContext关于它们携带的会话的实际区别,以及如何解决这个问题?

0 个答案:

没有答案