使用会话在 MVC 应用程序中维护登录的用户数据是否足够有效

本文关键字:数据 用户数 用户 是否 有效 登录 会话 MVC 应用程序 维护 | 更新日期: 2023-09-27 18:36:25

我正在开发 ASP.net MVC Web应用程序。在这里,我正在实现Windows身份验证。我已经在web.config文件中进行了必要的配置以使其工作

通过使用Windows身份验证,我能够获得登录的用户名。通过将其用作参数,我正在查询数据库以获取登录用户的角色。

在我的应用程序中,我有两个角色。管理员和普通用户。我需要根据用户登录的角色显示一些页面内容。

我是否可以使用 MVC 中的会话在每个页面中携带此信息并显示内容

例如:在 Global.asax 中

               protected void Session_Start(object sender, EventArgs e)
            {
                 Query database....
                if( role="Admin")
                {
              Session["UserType"]="Adimn";
               }                      
             else
            {
            Session["UserType"]="NormalUser";
            }
         }

喜欢这个。。然后在每个页面中,我将检查此角色,并在此基础上向用户隐藏/显示一些功能

这是这样做的正确方法吗?如果没有,还有什么替代方法可以做到这一点。

请建议..

使用会话在 MVC 应用程序中维护登录的用户数据是否足够有效

您应该使用 HttpContext.User.Identity 来获取当前用户。您可以获取用户名和用户角色:

var uName = HttpContext.User.Identity.Name;
var isAdmin = HttpContext.User.IsInRole("Admin");

与任何缓存方法一样,它有积极的一面和消极的一面。您的电话,如果你对解决方案没问题。下面是一些优点/缺点。

优点:

  • 减少对数据库的请求
  • 更快的页面(同样,您只需要加载会话状态)

缺点:

  • 缓存失效是一个复杂的问题:即您可能不知道特定用户是否不再是管理员
  • 由于站点中的错误而导致的会话泄漏允许特权提升(只需要具有会话 ID,不需要管理员凭据)。