繁体   English   中英

会话与User.Identity.Name进行比较,以使用Windows身份验证检查ASP.net核心应用程序的登录用户名

[英]Session vs User.Identity.Name to check the loggeduser name for ASP.net core application with windows authentication

我必须从数据库中获取用户ID,才能执行应用程序中的大多数功能。 我有启用Windows身份验证的.net core 2.1应用程序。

我的问题是一种有效的方法,是请求User.Identity.Name检查记录的用户名并获取用户ID(使用db查询)还是第一次从User.Identity.Name获取用户名,查询ID并将其分配给会话,并将ID用于后续请求。

User user = new User(xDbContext);

if ((HttpContext.Session.GetInt32("CurrentUserId") == null))
{
    loggedUserId = userPrivilege.GetUserId(User.Identity.Name);
    HttpContext.Session.SetInt32("CurrentUserId", loggedUserId);
}
else
{
    loggedUserId = HttpContext.Session.GetInt32("CurrentUserId").Value;
}

如果您询问是否应该:

  1. 每次需要该值时查询数据库,或者
  2. 一次查询数据库并将值存储在Session以便下次需要它时使用

答案是:这取决于。 如果您的Session数据存储在其他服务器上的数据库中,则不会有任何变化。 如果您的数据库与站点在同一台服务器上运行,那么差别将很小。

如果您的数据库位于其他服务器上,并且Session存储在内存中,那么从Session检索值将更快。

如果您的Session数据存储在数据库中,那么另一种选择是使用内存缓存 但是这些数据将在所有会话之间共享,因此您必须确保不会在其他人的请求中访问一个人的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM