ASP.NET User.Identity.Name альтернатива?

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

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

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

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

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

Благодарю.

2 ответа

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

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

Другие вопросы по тегам