Ранее полное обновление страницы было более распространенным для обновления содержимого, чем частичное обновление в веб-приложениях. С тех пор, благодаря многочисленным улучшениям в библиотеках и учебных ресурсах, у нас есть приложения, которые после загрузки первой страницы никогда не запрашивают страницу целиком, если пользователь этого не желает.
При частичной отправке и получении обновлений с сервера стало общепринятым сохранять состояние на сервере. Если более оптимально хранить состояние в клиенте, у нас есть старое решение использования файлов cookie или новый способ использования веб-хранилища и IndexedDB. Идея сохранения состояния в закодированных полях и отправки его на сервер (View State) увеличивает размер страницы, за исключением ненужных.
Что касается состояния сеанса, все, что я могу сказать, это то, что как минимум данных, которые вы храните в сеансах, тем больше вы изолированы от сбоев компьютера и потери данных. Если это важные данные, храните их в БД, храните на стороне клиента. Но небольшие объемы данных для аутентификации могут храниться в сеансе.
Для Application State, аргумент, аналогичный приведенному выше => использовать DB.