2015-09-17 1 views
2

У меня есть область сведений о пользователе, которая разделена на 6 разных страниц (подробности, контакт, настройки и т. Д.). Мне нужно иметь доступ ко всем деталям пользователя после входа в систему.Сессия MVC для хранения пользовательской информации и вызова БД

Я собирался добавить данные пользователя на сеанс, подобные этому после входа в систему, чтобы я мог получить доступ ко всем этим с разных страниц без необходимости вызова базы данных на каждой странице;

Session["name"] = name; 
Session["bla"] = bla; 

Однако я гугл и некоторые люди говорят о сохранении сессии в базу данных, которая звучит, как я, возможно, также не использовать его. Пользователи могут не получить доступ к каждой странице или потребовать доступа ко всей этой информации, поэтому ее можно рассматривать как ненужное, чтобы добавить их все в сеанс.

Есть ли рекомендуемая практика для хранения информации об этом пользователе? У меня также есть ID, который должен отображаться на каждой странице. Возможно, что-то вроде этого лучше для сеанса, а более подробные информационные страницы - для их собственных вызовов базы данных?

.

EDIT: Я использую Umbraco 7.2.8 и получаю информацию о членах от MemberService. Я беспокоюсь, что каждый раз попадает в базу данных. Мой код, чтобы получить детали участника, а также настраиваемые свойства элемента (в настоящее время на каждом контроллере);

 // Get the details of the user currently logged in 
     var profileModel = Members.GetCurrentMemberProfileModel(); 

     // Get the custom properties for the member 
     var member = memberService.GetByUsername(profileModel.UserName); 

     model.Firstname = profileModel.Name; 
     model.Email = profileModel.Email; 
     model.specialID = member.Properties["specialID"].Value.ToString(); 

Любые указатели были бы замечательными!

+0

Я использую сессии для всего, что не требуют изменений в базе данных (не включая логины). –

+0

Если вы обновите проект до MVC5 и воспользуетесь новыми библиотеками аутентификации Microsoft, вы можете добавить эту информацию в коллекцию Claims аутентифицированной Identity. – user65439

+0

Хранение данных в сеансе во избежание звонков в базу данных - это прекрасная практика, особенно для данных, которые не часто меняются.Превышение «сеанса» и внесение слишком большого количества данных приведет к проблемам (пул приложений будет вынужден перерабатываться, и все сессии истекут), и это вызовет больше проблем. –

ответ

3

Если вы используете встроенную службу пользователей Umbraco (link 1, link 2) для управления своими пользователями, у вас будет относительно простой способ получить current logged in member. Также легко управлять профилями участников с пользовательскими полями данных и так далее. Не нужно слишком много думать о сеансах и т. Д.

Edit: take a look in here - specifically the GetCurrentPersistedMember() method - Umbraco использует кэширование для сохранения текущего члена

+0

Привет - Я использую функцию memberservice (memberService.GetByUsername()) для получения пользовательских свойств элемента, но где-то читал, что он попадает в базу данных каждый раз, когда я его называю? Это то, чего я пытался избежать. – creatiive

+0

Хм, хорошо, может быть, это должно быть частью вашего описания, тогда :-) Я не думаю, что он каждый раз попадает в базу данных, но у меня нет никаких доказательств - так что, я думаю, вы могли бы сохранить весь профиль участника в переменная сеанса вместо каждого свойства в своей собственной сессии? Не знаю, как я буду использовать кеширование. –

+0

Нашел бит кода, который получает текущий член - из кеша :-) Обновлен мой ответ со ссылкой. –

0

Есть три популярный способ хранения данных в памяти

1) Кэшированием

2) Сессия

3) Статические классов

Из выше три я всегда предпочту Caching , как предлагают многочисленные статьи, и я тоже согласен с тем, что сеансы сравнительно медленны, чем кеширование. & Статические классы. Я всегда предпочитаю кешировать сеансы.

Но независимо от того, что вы используете, убедитесь, что вы инициализируете их в одном месте, так что все сеансы и кеширование, используемые во всем приложении, известны каждому разработчику. Это поможет в повторном использовании кода. & уменьшает дублирование инициализации того же значения снова в системе. Это также поможет в ремонте кода.

Смежные вопросы