У вас есть два варианта временного хранения данных формы: во-первых, сохранить информацию каждой формы в переменной (-ах) состояния сеанса и, во-вторых, передать информацию формы вместе с параметрами URL-адреса. Использование файлов cookie в качестве третьего потенциального варианта просто не работает по той простой причине, что у многих ваших посетителей, вероятно, отключены файлы cookie (однако это не влияет на файлы cookie сеанса). Кроме того, по характеру вашего вопроса я предполагаю, что вы не хотите хранить эту информацию в таблице базы данных, пока она не будет полностью зафиксирована.
Использование переменных сеанса - классическое решение этой проблемы, но оно имеет несколько недостатков. Среди них (1) большие объемы данных могут использовать оперативную память сервера, если вы используете внутрипроцессное управление сеансами, (2) совместное использование переменных сеанса между несколькими серверами в ферме серверов требует дополнительных соображений и (3) профессионально разработанное приложение должно защита от истечения срока действия сеанса (не просто приводите переменную сеанса и не используйте ее - если время сеанса истекло, приведение вызовет ошибку). Однако для подавляющего большинства приложений переменные сеанса, несомненно, подходят.
Альтернативой является передача информации каждой формы в URL-адресе. Основная проблема с этим подходом состоит в том, что вам нужно быть предельно осторожным при «передаче» информации. Например, если вы собираете информацию на четырех страницах, вам нужно будет собрать информацию на первой, передать ее в URL-адресе на вторую страницу, где вы должны сохранить ее в состоянии просмотра этой страницы. Затем при вызове третьей страницы вы собираете данные формы со второй страницы плюс переменные состояния просмотра и кодируете их в URL-адресе и т. Д. Если у вас пять или более страниц или если посетитель будет прыгать по сайту, вы у тебя на руках будет настоящий беспорядок. Также имейте в виду, что вся информация должна: A) быть сериализована в безопасную для URL-адресов строку и B) закодирована таким образом, чтобы предотвратить простые взломы на основе URL-адресов (например, если вы укажете цену в открытом виде и передадите ее вместе, кто-то мог изменить цену). Обратите внимание, что вы можете уменьшить некоторые из этих проблем, создав своего рода «диспетчер сеансов» и заставив его управлять строками URL-адресов за вас, но вам все равно придется быть чрезвычайно чувствительным к возможности того, что любая данная ссылка может уничтожить чей-то сеанс, если это не управляется должным образом.
В конце концов, я использую переменные URL только для передачи очень ограниченных данных с одной страницы на другую (например, идентификатор элемента, закодированный в ссылке на этот элемент).
Предположим, что вы действительно будете управлять данными пользователя, используя встроенную возможность сеансов. Почему кто-то скажет вам, что «сеанс - это зло»? Что ж, в дополнение к рассмотрению нагрузки на память, серверной фермы и истечения срока действия, представленных выше, основная критика переменных сеанса состоит в том, что они, по сути, являются нетипизированными переменными.
К счастью, разумное использование переменных сеанса позволяет избежать проблем с памятью (в любом случае большие элементы должны храниться в базе данных), и если вы используете сайт, достаточно большой, чтобы потребовалась ферма серверов, существует множество механизмов, доступных для совместного использования состояния, встроенных в ASP. .NET (подсказка: вы не будете использовать внутреннее хранилище).
Чтобы избежать практически всех остальных недостатков сеанса, я рекомендую реализовать объект для хранения данных сеанса, а также некоторые простые возможности управления объектами сеанса. Затем создайте из них потомка класса Page и используйте этот потомок класса Page для всех своих страниц. В таком случае легко получить доступ к данным сеанса через класс страницы в виде набора строго типизированных значений. Обратите внимание, что поля вашего объекта дадут вам возможность получить доступ к каждой из ваших «переменных сеанса» строго типизированным способом (например, по одному полю на переменную).
Дайте мне знать, если это простая задача для вас или вам нужен образец кода!
person
Mark Brittingham
schedule
25.09.2008