Подтвердить что ты не робот

Почему сеанс является катастрофой в приложении ASP.NET MVC?

Почему это сказано Мы не должны использовать переменные сеанса в приложениях ASP.NET MVC? Я наткнулся на этот ответ, который так говорит. В этом случае, как я буду поддерживать значения между запросами, такими как "Записанная информация пользователя" и некоторые соответствующие данные, связанные с его учетной записью?

Это Darin ответ.

Почему вы используете HttpContext.Current в приложении ASP.NET MVC? Никогда не используйте его. Это зло даже в классических веб-формах ASP.NET приложений, но в ASP.NET MVC это катастрофа, которая приносит массу удовольствия из этой приятной веб-структуры.

4b9b3361

Ответ 1

Один из основополагающих принципов фреймворков, таких как ASP.NET MVC, заключается в том, что они не имеют гражданства, как и в Интернете. ASP.NET Web Forms - это попытка подражать парадигме состояния с точки зрения состояния без гражданства. Это ложь, другими словами.

Использование переменной Session в приложении ASP.NET MVC немного напоминает привязку рога к голове лошади и вызов его Единорогом.

Ответ 2

Вы можете использовать состояние сеанса для сохранения данных, функциональность TempData использует Session по умолчанию для сохранения данных.

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

Вы можете использовать альтернативы для сохранения данных между запросами, например, вы можете использовать CookieValueProvider, который является частью MVC Futures для привязки данных cookie к модели. Вы также можете сохранять данные в фактическом DOM как скрытые поля, но опять же их следует как можно меньше минимизировать, так как размер данных будет отображаться в сетевом трафике в браузере и из него.

Я бы рассмотрел использование другого хранилища данных для вашего веб-приложения, если ваш основной магазин работает медленно. Например, SQLServer CE или встроенный RavenDB.