Session 如果使用表单身份验证,请将会话[key]检查为null
我有一个MVC4应用程序。我使用表单身份验证的位置。Session 如果使用表单身份验证,请将会话[key]检查为null,session,asp.net-mvc-4,Session,Asp.net Mvc 4,我有一个MVC4应用程序。我使用表单身份验证的位置。 在该应用程序中,我使用会话变量。 我需要检查它们是否为空值,还是它会自动检查会话。 若为空,则重定向到登录页面 如果我正在使用下面这样的功能,它会自动重定向到我的登录操作 string lstrUserId=Context.Session["UserId"]; 或者我需要手动检查吗 if(Context.Session["UserId"] != null) RedirectToAction("Login", "Home");
在该应用程序中,我使用会话变量。
我需要检查它们是否为空值,还是它会自动检查会话。
若为空,则重定向到登录页面 如果我正在使用下面这样的功能,它会自动重定向到我的登录操作
string lstrUserId=Context.Session["UserId"];
或者我需要手动检查吗
if(Context.Session["UserId"] != null)
RedirectToAction("Login", "Home");
就我的知识会话而言,它是由框架本身维护的如果是这样,我为什么会得到空引用异常。
将
[Authorize]
属性添加到控制器。如果您使用的是FormsAuthentication之类的东西,如果用户的计算机上有有效的FormsAuthentication cookie(您可以使用FormsAuthentication.SetAuthCookie添加),这将设置为true
Authorize属性通过查看HttpContext.User.Identity.IsAuthenticated来工作
下面的代码来自已发布的Microsoft Authorization Attrubute的源代码
protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name,StringComparer.OrdinalIgnoreCase)) {
return false;
}
if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)) {
return false;
}
return true;
}
我使用创建了一个类
CustomAuthorizeAttribute:AuthorizeAttribute
并使用了它。@Shekhar这没关系,但是如果您对这个自定义类进行了任何重写,它可能会工作不好。只需确保您仍然在重写的virtual
方法中调用base
继承的方法。