Сохранение пользовательских данных в MVC 3 - PullRequest
4 голосов
/ 16 декабря 2011

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

У меня есть класс User, который [Serializable], поэтому он может быть сохранен в сеансе. Я использую SQL-сервер для состояния сеанса, а также. Я думал о сохранении объекта в сессии, но я действительно ненавижу это делать.

Как разработчики обрабатывают этот тип требований в наши дни?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2011

Предполагая, что ваш пользовательский объект не очень большой и часто не меняется, я думаю, что его можно хранить в сеансе.
Поскольку у вас уже есть сеанс сервера sql, вы будете делать вызовы SP, чтобы уже извлекать / выгружать данные, и добавление небольшого объекта к нему должно иметь минимальные проблемы с производительностью по сравнению с другими вариантами, такими как сохранение его на клиенте и отправка его на каждом запрос. Я также считаю сервер более безопасным местом для хранения этой информации.
Вы хотите минимизировать количество раз, когда вы записываете в сеанс (запрашиваете блокировку), когда он хранится в sql, поскольку он реализован в запечатанном классе, эксклюзивность которого блокирует сеанс. Если для любых других ваших запросов в этом сеансе требуется доступ на запись в сеанс SQL, они будут заблокированы начальным запросом до тех пор, пока он не снимет блокировку сеанса. (в .NET 4 есть несколько новых хуков, позволяющих вам изменять SessionStateBehavior в конвейере до доступа к сеансу)

Вы можете рассмотреть сервер состояния сеанса (appfabric), если проблема с хранилищем сеансов SQL является проблемой.

0 голосов
/ 16 декабря 2011

Три способа:

  1. Шифрование данных в файлах cookie и отправка их клиенту, расшифровка их в любое время, когда вам это нужно, Session или любое другое хранилище (более безопасное, чем cookie).
  2. Используйте стратегию кэширования второго уровня, если вы использовали ORM
...