0

我有一个 MVC4 应用程序。我在哪里使用表单身份验证。
在该应用程序中,我使用的是 Session 变量。
我是否需要检查它们是否有空值,或者它会自动检查 Session.
如果它为空,它会被重定向到登录页面。

例如。如果我像下面这样使用它会自动重定向到我的登录操作

string lstrUserId=Context.Session["UserId"];

还是我需要手动检查

 if(Context.Session["UserId"] != null)
       RedirectToAction("Login", "Home");

到目前为止,我的知识会话由框架本身维护。

如果是这样,为什么我会收到空​​引用异常。

4

2 回答 2

0

如果您使用的是 FormsAuthentication 之类的东西,如果用户在他们的机器上有一个有效的 FormsAuthentication cookie(您可以使用 FormsAuthentication.SetAuthCookie 添加),这将设置为 true。

Authorize 属性通过查看 HttpContext.User.Identity.IsAuthenticated 起作用。

下面的代码来自于 Microsoft 发布的Authorize 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;
}

FormsAuthentication 详细信息

于 2013-07-02T06:56:10.863 回答
0

[Authorize]属性添加到您的控制器。

于 2013-07-02T06:34:22.103 回答