ASP.NET成员资格:存储当前用户ID的位置?

Jon*_*ood 5 asp.net asp.net-membership

使用ASP.NET成员资格,如果我想获取当前用户的信息,我可以打电话 MembershipUser.GetUser()

因此,系统必须知道当前用户的ID.

如果这是正确的,并且我想要的只是当前用户的ID,是否有办法在不从数据库返回所有用户信息的情况下获取它?

我知道我可以使用当前用户的用户名User.Identity.Name,但我需要ID.

小智 10

简短的回答是,当您使用内置成员资格提供程序时,您不能仅获取用户ID而不检索整个用户信息

    MembershipUser user = Membership.GetUser();
    string UserID = user.ProviderUserKey.ToString();
Run Code Online (Sandbox Code Playgroud)

但是如果你想拥有只检索userID的方法或属性,你必须重新实现自己的成员资格提供者或(简单地说)实现IPrincipal接口


Jon*_*ood 0

进一步研究后发现,ASP.NET Membership API 似乎并没有跟踪用户 ID。它必须仅跟踪用户名 ( User.Identity.Name)。ID 不是必需的,因为可以通过 IDMembership.GetUser()用户名查找用户。

事实上,Membership.GetUser()必须简单地翻译为Membership.GetUser(User.Identity.Name). 由于它可以从用户名获取当前用户,因此不再有任何理由假设当前用户 ID 缓存在任何地方。

因此,ID 似乎没有加载到内存中,获取 ID 的唯一方法是从数据库加载数据(这意味着在使用 ASP.NET Membership API 时加载整个用户记录)。