我已经创建了自定义成员资格提供程序,操作MembershipUser.ProviderUserKey
而不是UserName更方便。因此,要检索ProviderUserKey
,我会执行以下代码:
if (User.Identity.IsAuthenticated)
{
int UserID = (int)Membership.GetUser(User.Identity.Name).ProviderUserKey;
}
但是,当执行GetUser()
方法时,必须从数据库中检索用户数据,这对我不利。这是不必要的浪费服务器时间,无论这个时间有多短,我都想避免它。
还有其他方法可以更方便地获取ProviderUserKey
,例如User.Identity.Name
案例吗?
我想听听你的想法。您如何在网页上解决此问题?。
感谢。
答案 0 :(得分:5)
Membership API正在访问数据库,因为它是存储此信息的唯一位置。 User.Identity.Name
从每次请求发送的cookie中获取记录的用户名。您可以实现自定义通用主体并将必要的信息存储到在cookie中加密的身份验证票证的userData
部分中。这是一个涵盖此主题的article。
答案 1 :(得分:3)
首次登录时从数据库中读取ProviderUserKey
并将其存储在用户的会话集合中?在后续请求中,您只需从会话中获取它而无需访问数据库。