如何在ASP.NET MVC应用程序中正确使用会话?

我正在使用ASP.NET MVC5实现Web应用程序。我没有使用常规的MVC身份验证和授权。我选择使用Sessions来代替,因为我的应用程序将由很少的用户使用,并且仅在本地使用。

我在gloab.asax的Session["LoggedUser"]内设置了Application_Start()Session["LoggedUser"]的值在登录时设置。然后,我在多个操作(例如 Edit Delete 等)中使用了Session["LoggedUser"]条件检查了if的值。等于空白字符串,则该操作/页面上无权授权用户,反之亦然。这样的页面将无法直接访问。

现在,在常规的MVC授权和身份验证中,使用[AllowAnonymous][Authorize][Authorize(Roles="Admin")]非常干净。这些标签可以放在控制器中的任何动作上,授权将在下面处理。我试图找到与这些标记等效的标记,以用于基于会话的身份验证和授权。也许,这是在MVC应用程序中使用会话的一种高效/更好的方式。请引导我。

谢谢。

topten800 回答:如何在ASP.NET MVC应用程序中正确使用会话?

您可以创建一个自定义过滤器来执行您的逻辑。 read here

添加自定义属性,以使用访问限制/允许标记您的Actions / Controller。 (从安全的角度来看,最好标记为允许而不是限制,以后再添加操作以证明将来是可行的)

并在过滤器中检查操作/控制器的属性。

,

这里是使用Authrization属性的方法

public class SessionAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext.Session["LoggedUser"] == null)
            return false;
        else
       {
           var rd = httpContext.Request.RequestContext.RouteData;
           string currentAction = rd.GetRequiredString("action");
           string currentController = rd.GetRequiredString("controller");
           string currentArea = rd.Values["area"] as string;
           ...
           //Your business logic returns true or false based on user
        }
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectResult("~/Account/Login");
    }
}
本文链接:https://www.f2er.com/3138949.html

大家都在问