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
из базы данных при первом входе в систему и сохранении его в коллекции сеансов пользователя? При последующих запросах вы можете просто получить его из сеанса, не заходя в базу данных.