Как я могу хранить информацию о пользователях в MVC между запросами - PullRequest
0 голосов
/ 18 декабря 2010

У меня есть MVC2-сайт, использующий аутентификацию Windows.

Когда пользователь запрашивает страницу, я извлекаю некоторую информацию о пользователе из базы данных. Класс, который я извлекаю, является классом Person.

Как получить это из базы данных, когда пользователь заходит на сайт, и подобрать тот же класс, не касаясь БД во всех последующих запросах страницы?

Должен признать, я довольно растерян, когда дело доходит до обработки сеансов в ASP.net MVC.

Ответы [ 4 ]

1 голос
/ 18 декабря 2010

Вы можете хранить такую ​​информацию в HttpContextBase.Session.

0 голосов
/ 18 декабря 2010

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

Если вы не находитесь в среде балансировки нагрузки, вы можете использовать TempData, чтобы сохранить ваш объект и затем извлечь его в следующем запросе.

0 голосов
/ 18 декабря 2010
HttpContext.Current.Session[key];
0 голосов
/ 18 декабря 2010

Один из вариантов - извлечь объект Person из вашей базы данных при первом обращении и сохранить его в System.Web.HttpContext.Current.Cache, это обеспечит чрезвычайно быстрый доступ, и ваши данные Person будут временно сохранены в ОЗУ на веб-сервере.

Но будьте осторожны: если вы таким образом храните значительно больший объем пользовательских данных, вы можете съесть много памяти.Тем не менее, это будет совершенно нормально, если вам нужно кэшировать всего несколько тысяч или около того.Очевидно, что это зависит от того, сколько пользователей вы ожидаете использовать ваше приложение.

Вы можете добавить вот так:

private void CachePersonData (Person data, string storageKey)
{
    if (HttpContext.Current.Cache[storageKey] == null)
    {
        HttpContext.Current.Cache.Add(storageKey, 
            data, 
            null, 
            Cache.NoAbsoluteExpiration, 
            TimeSpan.FromDays(1), 
            CacheItemPriority.High, 
            null);
    }
}

... и получить вот так:

// Grab data from the cache 
Person p = HttpContext.Current.Cache[storageKey];

Не забывайте, что объект, возвращаемый из кеша, можетбыть нулевым, поэтому вы должны проверить это и загрузить из базы данных по мере необходимости (затем кешировать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...