ASP.NET User.Identity.Name替代?

时间:2010-11-18 10:57:48

标签: asp.net membership-provider membershipuser

我已经创建了自定义成员资格提供程序,操作MembershipUser.ProviderUserKey而不是UserName更方便。因此,要检索ProviderUserKey,我会执行以下代码:

if (User.Identity.IsAuthenticated)
{
  int UserID = (int)Membership.GetUser(User.Identity.Name).ProviderUserKey;
}

但是,当执行GetUser()方法时,必须从数据库中检索用户数据,这对我不利。这是不必要的浪费服务器时间,无论这个时间有多短,我都想避免它。

还有其他方法可以更方便地获取ProviderUserKey,例如User.Identity.Name案例吗?

我想听听你的想法。您如何在网页上解决此问题?。

感谢。

2 个答案:

答案 0 :(得分:5)

Membership API正在访问数据库,因为它是存储此信息的唯一位置。 User.Identity.Name从每次请求发送的cookie中获取记录的用户名。您可以实现自定义通用主体并将必要的信息存储到在cookie中加密的身份验证票证的userData部分中。这是一个涵盖此主题的article

答案 1 :(得分:3)

首次登录时从数据库中读取ProviderUserKey并将其存储在用户的会话集合中?在后续请求中,您只需从会话中获取它而无需访问数据库。