2009-12-14 3 views
0

В нашем приложении у нас есть «BasePage», который объявляет ряд свойств, которые будут использоваться более или менее на каждой странице приложения.Состояние сеанса v ViewState

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

Я использовал viewstate, так как я опасаюсь потери переменных сеанса, если IIS перерабатывает, например. Кроме того, я полагал, очень маленькие значения не добавят огромного размера страницы.

Могу ли я быть слишком параноидальным в отношении сеанса, хотя это был бы лучший вариант.

Наша среда - это 2-х серверный кластер с завершением SSL на каждом сервере, липкие сеансы, поддерживаемые балансировщиком нагрузки, поэтому использование In Proc не является проблемой для каждого пользователя, я просто очень осторожен в этом.

ответ

3

Никогда не доверяйте отправленным пользователям данным.

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

Способы хранения данных?

  • Скрытое поле; может быть легко изменен на стороне клиента
  • Cookie; древний метод для хранения пользовательских данных, но очень ограниченный размер.
  • ViewState; ваши данные идут к клиенту и возвращаются, используя полосу пропускания и могут быть подделаны.
  • Сессия, InProc; у вас никогда не будет проблем, пока пул приложений не будет переработан
  • Сессия, государственный сервер; вы сохраняете данные сеанса в другом сервере.
  • Сессия, база данных; может работать с почти (если не все) сценами баланса нагрузки, так как вам не нужны сеансы папок, а также не беспокоиться об утилизации пулов приложений. Все ваши данные принадлежат us вашим SQL Server.

Чтение вашего сценария, вероятно, вам необходимо иметь дело с хранилищем сеансов вне процесса.

+0

Я думаю, что в нашем случае я придерживаюсь viewstate, поскольку объекты являются чрезвычайно легким. Я измерил точку зрения до и после настройки и ее крошечную. Мы действительно смотрели из хранилища сеансов proc, sql, но наши ребята из инфраструктуры сказали, что он не стоит удара производительности из-за увеличения нагрузки ввода-вывода (помните, что мы можем снова взглянуть на него, если наша среда изменится, и нам нужно). Хорошее резюме опций, хотя, спасибо По крайней мере, из моего чтения всех этих сообщений, кроме увеличения размера страницы, я не делаю ничего принципиально неправильного как такового – Solyad

1

Если это не чувствительные данные, я бы также предпочел хранить его в HTML, а не в сеансе.

2

Я думаю, что лучше избегать использования состояния сеанса, где это возможно, особенно на кластере серверов, даже если вы используете липкие сеансы. Сессии могут истекать или исчезать, когда IIS перерабатывает (как вы сказали).

Я бы сохранил значения в ViewState или в файле cookie.

Смежные вопросы