我有一个场景:
搜索控件我们的数据输入人员输入用户ID并搜索他们的详细信息并浏览与该用户相关的不同页面。
所以在我的MVC应用程序中,我正在设置一个会话来维护会话变量中的用户ID。在页面上的每个方法(如编辑,更新..etc)我正在检查用户会话是否存在。我可以在全球范围内进行,所以我不需要每次检查吗?就像在global.asax中一样
protected void Application_Start()
{
}
或编写自定义方法来检查会话。
请有人帮助我做到这一点。
由于
答案 0 :(得分:12)
在MVC应用程序中,您可以创建继承自AuthorizeAttribute的属性, 然后在该属性中,您可以检查您的会话。您可以将它放在需要的控制器或GlobalFilters集合上。
<强> UPDATE1 强>
以下是此类逻辑的示例
public class SessionAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return httpContext.Session["InsuredKey"] != null;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("/some/error");
}
}
然后你可以将它放在需要的控制器下,如
[SessionAuthorize]
public class SomeController
{
}
答案 1 :(得分:9)
接受的答案实际上并未重定向到HandleUnauthorizedRequest
时间指定的页面。
我必须修改一些东西才能使其正常工作
public class SessionAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return httpContext.Session["InsuredKey"] != null;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "YourAction" },
{ "controller", "YourController" }
});
}
}
对未来的用户可能会有所帮助。