Почему я должен удалить форму, используя HTTPContext Session State в моих приложениях ASP .Net MVC?
Я помню, как читал несколько мест, в которых люди не одобряют использование состояния HTTPContext.Current.Session в веб-приложениях ASP .Net.
Может кто-нибудь объяснить некоторые причины этой недавней тенденции? Есть ли для этого серьезные технические причины?
Спасибо, ДжонБ
2 ответа
Во-первых, MVC - это не веб-формы, это значит, что они не имеют состояния.
http://www.wintellect.com/blogs/jprosise/thoughts-on-asp-net-s-new-mvc-framework
Во-вторых, MVC по своей природе является спокойным http://dotnetslackers.com/articles/aspnet/AnArchitecturalViewOfTheASPNETMVCFramework.aspx и, в соответствии с переполнением стека (lol), сеансы не являются спокойными.
Действительно ли сессии нарушают RESTfulness?
В-третьих, сессия - это старая школа. Вы можете обновить свое приложение с некоторой работой с вашей стороны, а также повысить безопасность данных и скорость реагирования. "Каждый HTTP-запрос к приложению означает, что ваше приложение должно сделать 2 дополнительных сетевых запроса в хранилище вне процесса - один для загрузки сеанса до обработки запроса, а другой для сохранения сеанса после завершения обработки запроса" http://brockallen.com/2012/04/07/think-twice-about-using-session-state/
Причина в том, что "смена сеанса". По сути, пользователи могут заканчивать сеансами других пользователей. Результат этого может остаться незамеченным или привести к тому, что пользователи будут просматривать конфиденциальную информацию.
У меня нет точного технического справочника по этому поводу из MSDN, но я видел, как это происходило "в дикой природе" раньше. Быстрый поиск в Google дает много результатов. Вот один пример: http://forums.asp.net/t/1519279.aspx
Однако все зависит от того, как вы реализуете свои сеансы. В конце концов, сеансы - это всего лишь версия кеширования, поэтому передовой опыт должен диктовать, что этот кеш не размещается в системной памяти (по умолчанию это InProc). Чтобы следовать рекомендациям, рекомендуется настроить сервер специально для обслуживания сеансов, которые были поддержаны базой данных.
В конце концов, это не средство сеанса, а параметр InProc, который не рекомендуется использовать.