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

如何在ASP.NET MVC应用程序中正确使用会话?,asp.net,asp.net-mvc,authentication,session,authorization,Asp.net,Asp.net Mvc,Authentication,Session,Authorization,我正在使用ASP.NET MVC5实现一个web应用程序。我没有使用传统的MVC身份验证和授权。我选择使用会话,因为我的应用程序将被很少的用户使用,而且只在本地使用 我已经在gloab.asax中的应用程序启动()中设置了会话[“LoggedUser”]。Session[“LoggedUser”]的值在登录时设置。然后,我在多个操作(如编辑和删除等)中使用if条件检查了会话[“LoggedUser”]的值。。如果它等于空白字符串,则该用户无权执行该操作/页面,反之亦然。这些页面将不会被直接访问

我正在使用ASP.NET MVC5实现一个web应用程序。我没有使用传统的MVC身份验证和授权。我选择使用
会话
,因为我的应用程序将被很少的用户使用,而且只在本地使用

我已经在gloab.asax中的
应用程序启动()中设置了
会话[“LoggedUser”]
Session[“LoggedUser”]
的值在登录时设置。然后,我在多个操作(如编辑和删除等)中使用
if
条件检查了
会话[“LoggedUser”]
的值。。如果它等于空白字符串,则该用户无权执行该操作/页面,反之亦然。这些页面将不会被直接访问

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


提前感谢。

您可以创建一个自定义筛选器来执行您的逻辑。

添加自定义属性以标记具有访问限制/允许的操作/控制器。 (从安全角度来看,最好标记为允许,而不是限制,以防以后添加操作)


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

以下是如何使用Authorization属性进行操作

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");
    }
}