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

Зачем вам когда-либо использовать объект хранения asp.net ViewState через объект хранения Session?

Кроме того, что хранение сеанса является глобальным сеансом на более чем одной странице, почему вы хотите использовать свойство viewstate для хранения значений?

Кажется нелепым отправлять любую информацию, отличную от нескольких небольших строк запроса, таких как значения, обратно и вперед от клиента к серверу. Я имею в виду, что пустая трата (!), Просто для хранения. Сеанс, в то время как глобальный через несколько страниц, кажется совершенно превосходной альтернативой viewstate.

В частности, с элементами управления и вариантами asp.net ajax, viewstate может быстро стать раздутым, отслеживая различные состояния и переменные всех этих элементов управления и html-элементов.

Но почему же существует хранилище viewstate для переменных страницы и объектов?

Возможно, мне не хватает еще одного отличного использования для хранилища данных на странице, кто-нибудь знает что-то там?

Спасибо за чтение!

EDIT: У всех был отличный ответ, извините, если я не выбрал ваш.

4b9b3361

Ответ 1

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

Ответ 2

Вся причина для Viewstate или Session - превратить Интернет из системы без состояния в динамический, настраиваемый опыт. Когда пользователь запрашивает страницу, единственный способ возобновить работу, когда пользователь остановился в своем опыте, - запомнить состояние либо на сервере, либо на клиентском компьютере.

Viewstate - это механизм для запоминания состояния пользователя на клиенте. Сессия - это механизм для запоминания состояния пользователя на сервере.

Viewstate - механизм временного хранения. Элементы управления, использующие viewstate, отображают свое состояние на странице html как скрытый ввод. Чтобы предотвратить несанкционированное вмешательство, он подписан. Тем не менее, он не зашифрован, поэтому вы, вероятно, захотите избежать чувствительности там НИЧЕГО. Viewstate полезен для ситуаций, когда вы хотите опубликовать несколько запросов (загрузок страниц). Примером этого является то, что форма не проверяется, потому что, возможно, пользователь ввел плохой адрес электронной почты или что-то еще, и вы хотите восстановить форму, как это было до отправки пользователем. Недостатком этого является то, что viewstate - голодный зверь и может легко добавить 30-50% к размеру страницы.

Сессия, с другой стороны, хранится на сервере. Клиент получает токен, который сообщает серверу, какой блок памяти принадлежит им. Это может быть гораздо более безопасным, чем viewstate, поскольку данные не повторно передаются пользователю снова и снова. Однако есть компромиссы. На вашем сервере может закончиться нехватка памяти. Или пользователь может потерять данные, если их сеанс нарушен.

Как правило, нет "правильного" ответа на использование. Это все о том, чего вы пытаетесь достичь.

Большинство вещей, связанных с элементами управления, должны использовать Viewstate. Если вы имеете дело с конфиденциальной информацией, рассмотрите Сессию. Если у вас есть данные, относящиеся к определенному набору страниц, используйте viewstate. Если это данные, которые вам понадобятся во время посещения пользователем на вашем сайте, более солидная сессия.

Ответ 3

Например, если ваше приложение может работать в ферме компьютеров, и вы не можете настроить сеанс на использование SQL-сервера. (Или использование SQL-сервера слишком сильно влияет на производительность)

Ответ 4

ViewState и Session имеют разные области. ViewState предназначен для хранения более или менее временных данных во время "postbacks", в то время как сеанс используется для сохранения важных данных состояния сеанса. Я рекомендую использовать ViewState для состояния, связанного с определенным "сеансом страницы".

Если вам не нравится нормальное поведение ViewState, довольно просто написать собственный PageStatePersister и позволить этому объекту выполнять персистентность, например, используя сеанс или что-то вроде Memcached. Затем вы можете полностью переопределить механизм сохранения по умолчанию.

Тогда хорошо, что вы можете беспрепятственно продолжать использовать стандартные веб-элементы управления в .NET Framework, которые будут использовать ViewState/ControlState для этого типа данных, без раздувания ViewState. Механизм сохранения памяти сервера может быть очень эффективным.

Ответ 5

ViewState по существу является просто скрытым вводом, который должен быть загружен на сервер и проанализирован с каждым запросом. Это поле обычно заполняется автоматически, часто с программным обеспечением, блаженно не осознающим, и может расти довольно широко. Для многих сайтов, которые представляют проблему, потому что даже у широкополосных пользователей очень ограниченная пропускная способность восходящего канала.

На сайтах интрасети, где все пользователи имеют высокоскоростной доступ к ЛВС на сервер, но доступный для хранения данных сеанса, он может иметь больше смысла.

Ответ 6

Не совсем прямой ответ на ваш вопрос, но он может решить вашу проблему.

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

Создайте класс наследует страницу и переопределите pageStatePersister. http://msdn.microsoft.com/en-us/library/system.web.ui.sessionpagestatepersister.aspx

 public class RussPage : Page
    {
         protected override PageStatePersister PageStatePersister
        {
            get
            {
                return new SessionPageStatePersister(Page);
            }
        }
    }

Ответ 7

Не ответ на ваш вопрос, но одно из ваших предположений неверно.

Идентификаторы сеансов могут быть переданы в URL-адресе. Сессия не требует куки.

http://msdn.microsoft.com/en-us/library/aa479314.aspx

<sessionState cookieless="true" />

Ответ 8

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