Asp.Net mvc сессия против кеша - PullRequest
3 голосов
/ 25 марта 2011

Мы занимаемся разработкой приложения asp.net mvc.мы должны хранить некоторую информацию о пользователе, пока пользователь вошел в систему. Какой вариант для меня?Кеш распределяется между всеми пользователями сайта.Кажется, сессия является опцией, но я прикрепил веб-формы для отображения Crystal Reports и объекта Session, используемого веб-формами, а MVC отличается: Mvc использует HttpSessionStateBase, а веб-формы используют HttpSessionState.

Сколько информации следует хранить в сеансе(У меня есть массив около 30 целых чисел / пользователь)?Должен ли я сохранить его в сеансе или вместо него следует использовать какую-то комбинацию сеанса и кэша?

Редактировать: Я создал SessionService, который принимает HttpSessionStateBase в качестве параметра и из Mvc, который я вызываюнапример:

SessionService _service = new SessionService(HttpContext.Session);

возвращает HttpSessionStateBase, но, как предположил Дарин, это абстрактный класс, поэтому он также может использовать реализацию SessionStateWrapper.В сценарии веб-форм я использую что-то вроде

HttpSessionStateWrapper Session = new HttpSessionStateWrapper(HttpContext.Current.Session);
            SessionService _SessionRepository = new SessionService(Session);

Ответы [ 3 ]

9 голосов
/ 25 марта 2011

Хорошо хранить 30 целых чисел на пользователя в сеансе.

Но на самом деле, используя кеш, вы можете столкнуться с проблемами, о которых вам необходимо знать:

  • Состояние сеанса -если только не используется сервер состояний или sql-сервер - он будет volatile и может быть потерян при утилизации.Кроме того, если вы перемещаете свой сайт на несколько серверов, вам необходимо заполнить сеанс на всех из них, если вы используете энергозависимый сеанс.
  • Многие функции ASP NET, такие как аутентификация, основаны на cookie , а неоснованный на сеансе.Вы должны знать, что они не работают в тандеме.Например, если вы используете проверку подлинности с помощью форм и перезапускаете сайт или перезапускаете приложение, пользователь остается аутентифицированным, пока вы потеряли всю информацию о сеансе.
4 голосов
/ 25 марта 2011

Сессия, кажется, вариант, но я прикрепили вебформы для показа Crystal Reports и объект Session Используется веб-формами, а MVC отличается: Mvc использует HttpSessionStateBase и веб-формы используют HttpSessionState.

HttpSessionStateBase - абстрактный класс, а его реализация - просто оболочка исходного объекта HttpSessionState. Поэтому, пока вы остаетесь в одном приложении, сеанс между MVC и WebForms точно такой же, и вы сможете обмениваться данными, используя его. Так что в вашем сценарии сеанс кажется правильным подходом для сохранения данных.

0 голосов
/ 25 марта 2011

Ничего плохого в использовании сессии для этого. Будет хорошо.

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