如何在ASP.NET MVC应用程序中正确使用会话?
我正在使用ASP.NET MVC5实现一个web应用程序。我没有使用传统的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”]的值。。如果它等于空白字符串,则该用户无权执行该操作/页面,反之亦然。这些页面将不会被直接访问
会话
,因为我的应用程序将被很少的用户使用,而且只在本地使用
我已经在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");
}
}