У меня есть защита в моем приложении 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 в отношении сеанса, который они несут, и как мне обойти эту проблему?