【问题标题】:How to properly use Sessions in ASP.NET MVC Application?如何在 ASP.NET MVC 应用程序中正确使用会话?
【发布时间】:2020-03-04 22:37:15
【问题描述】:

我正在使用 ASP.NET MVC5 实现一个 Web 应用程序。我没有使用传统的 MVC 身份验证和授权。我选择使用Sessions,因为我的应用程序将被极少数用户使用,并且仅在本地使用。

我在 gloab.asax 中的 Application_Start() 中设置了一个 Session["LoggedUser"]Session["LoggedUser"] 的值是在登录时设置的。然后,我在多个操作(例如 EditDelete 等)中使用if 条件检查了Session["LoggedUser"] 的值。如果它等于空白字符串,则用户未在该操作/页面上获得授权,反之亦然。此类页面不会被直接访问。

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

提前致谢。

【问题讨论】:

    标签: asp.net asp.net-mvc authentication session authorization


    【解决方案1】:

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

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

    并在您的过滤器中检查 Action/Controller 的属性。

    【讨论】:

      【解决方案2】:

      这是使用授权属性的方法

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

      【讨论】:

        猜你喜欢
        • 2012-12-17
        • 2011-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 2015-07-27
        • 1970-01-01
        相关资源
        最近更新 更多