ASP.NET - сессии? - PullRequest
       7

ASP.NET - сессии?

1 голос
/ 11 сентября 2010

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

Лучше всего, как описано выше, просто поместить идентификатор модели всеанс, а затем извлечь его позже, или я должен передать всю модель?

Ответы [ 4 ]

1 голос
/ 11 сентября 2010

Зависит от модели.Если это сущность, которая имеет отношение только к текущему пользователю, то, вероятно, она не изменится через другого пользователя или систему, и сеанс будет таким же хорошим местом, как и где-либо еще, для его хранения. *Также может иметь смысл хранить копию для каждого пользователя, если это то, на что часто влияет каждый пользователь.

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

* Тем не менее, это открывает совершенно другой набор вопросов, связанных с кэшированием и обращением к базе данных каждый раз, на которые можно ответить только путем тщательного архитектурного анализа приложения ишаблоны использования.Является ли WFE (веб-интерфейс) память менее востребованным, чем соединения с базой данных.Хватит ли поиск объекта снова и снова больше или меньше, чем хранение копий в других местах?

0 голосов
/ 12 сентября 2010

А если мне нужно сохранить пользователя вход в сеанс, чтобы я мог перенаправить на страницу подтверждения? - Тогда я "должен" положить модель в сессию

В этом сценарии вам вообще не нужно помещать его в сессию. Отправьте сообщение непосредственно на страницу подтверждения, и вы получите значения из этого сообщения. На странице подтверждения отправьте значения обратно клиенту / скрытому полю или полям, в зависимости от того, как вы решили их отправить.

Существуют также различные альтернативы, не связанные с использованием сеанса.

0 голосов
/ 11 сентября 2010

Да , рекомендуется хранить только идентификатор, а затем извлекать / обновлять запись из базы данных, когда вам это нужно.

Если вы храните весь объект в сеансе, вы в основном кэшируете его , и вам необходимо знать обо всех соответствующих проблемах кэширования (устаревшие данные, объем памяти и т. Д.).

Преимущество сохранения всего объекта

  • Отсутствие необходимости возвращаться в базу данных (быстрее, если сеанс находится в памяти)

Недостатки заключаются вбыть

  • Если другой пользователь / процесс обновляет эту запись, у вас теперь есть несинхронизированная запись.
  • Возможны проблемы с памятью, так как вы можете хранить много данных в сеансе и в процессене управляйте им в целом.

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

0 голосов
/ 11 сентября 2010

Я не буду хранить целые модели в сеансе и буду склоняться к методу идентификации.Причина в том, что сеанс будет сохраняться в течение всего времени, пока пользователь находится на вашем сайте, и он не будет очищен после того, как пользователь перешел на страницу сравнения, которая больше не требует данных.Что если пользователь получит доступ ко многим страницам, на которых вы храните этот тип хранилища?Это может привести к большой потере памяти.

Если это данные, которые могут использоваться многими пользователями, вы можете рассмотреть возможность использования Cache вместо Session, так как это сэкономит вам дублирование тех же данныхчерез несколько сеансов.

РЕДАКТИРОВАТЬ: Заметил, что ваша заметка говорит, что это была форма заказа.Вы можете использовать сеанс для сохранения «текущего заказа» для пользователя и очистки его / замены при отправке / создании заказов.Вы должны были бы сохранить это, потому что есть многократные шаги?В некоторых случаях, если данные очень ограничены, вы можете сохранить их в файлах cookie, а затем обязательно очистить файл cookie после выполнения заказа.

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