ASP.NET User.Identity.Name альтернатива? - PullRequest
1 голос
/ 18 ноября 2010

Я создал пользовательский провайдер членства, и мне удобнее работать с MembershipUser.ProviderUserKey, а не с UserName. Итак, для извлечения ProviderUserKey я выполняю такой код:

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

Однако, когда выполняется метод GetUser(), пользовательские данные должны быть извлечены из базы данных, и это меня беспокоит. Это бесполезная трата серверного времени, независимо от того, насколько коротким это время, я бы хотел его избежать.

Есть ли другой способ получить ProviderUserKey более удобным способом, как в User.Identity.Name случае?

Я хотел бы услышать ваши идеи. Как вы решаете эту проблему на своих веб-страницах?.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 18 ноября 2010

Членский API попадает в базу данных, потому что это единственное место, где хранится эта информация. User.Identity.Name извлекает зарегистрированное имя пользователя из файла cookie, который отправляется при каждом запросе. Вы можете реализовать пользовательский общий принципал и сохранить необходимую информацию в части userData билета аутентификации, который зашифрован в cookie. Вот статья , которая охватывает эту тему.

3 голосов
/ 18 ноября 2010

Считать ProviderUserKey из базы данных при первом входе в систему и сохранить ее в коллекции сеансов пользователя? При последующих запросах вы можете просто получить его из сеанса, не заходя в базу данных.

...