Пользовательское членство asp.net провайдера много вызовов GetUser() делает приложение медленным
Я работаю над системой порталов для обмена информацией, документами и т. Д. Каждый пользователь может иметь несколько профилей. Таким образом, каждый профиль может иметь разные роли и разрешения. Сейчас все работает нормально, но у меня есть вопрос по поводу MembershipProvider и MembershipUser.
Я использую пользовательские MembershipProvider и MembershipUser в сочетании с OpenAccess ORM.
Я очень полагаюсь на (CustomMembershipUser)Membership.GetUser()
, Например, я создаю пользовательское меню, где они могут видеть, от какого пользователя они вошли и из каких профилей они могут выбрать.
Чтобы создать это меню и собрать группы, роли и разрешения для текущего профиля, необходимо много Membership.GetUser()
из разных мест в коде. Сначала я кэшировал пользователя и возвращал его на основе ProviderUserKey, но мне сказали, что это небезопасно. Поэтому я удалил кеширование, но это было намного быстрее. Есть ли альтернатива, лучшая практика для этого?
2 ответа
Для вашей ситуации не существует 100% -ого решения, либо вы кэшируете свои результаты, либо вычисляете его каждый раз. Компромисс заключается в том, чтобы очень тщательно настраивать политики кэширования, если кеширование создает риск для вашего приложения.
Afaik, кеширование вызывает риски в очень редких ситуациях, только если вам нужно применить изменения немедленно. Подумайте об использовании некоторых расширенных политик кэширования, таких как зависимость кэша.
Сессия является подходящим решением на основе вашего описания. Это достаточно безопасно. HttpContext.Items["MembershipUser"] хранит информацию о пользователе только в пределах одного http-запроса, в то время как сеанс сохраняет информацию до истечения сеанса.
Кэш, однако, для каждого приложения, а не для пользователя