Ваши два варианта временного хранения данных формы - это, во-первых, сохранение информации каждой формы в переменных состояния сеанса и, во-вторых, передачу информации о форме с использованием параметров URL. Использование Cookies в качестве потенциального третьего варианта просто не работает по той простой причине, что многие из ваших посетителей, вероятно, отключили cookies (это, однако, не влияет на сеансовые куки).Кроме того, я предполагаю в силу вашего вопроса, что вы не хотите хранить эту информацию в таблице базы данных до тех пор, пока она полностью не будет выполнена.
Использование переменных (ов) сеанса является классическим решением этой проблемы, но оно имеет несколько недостатков. Среди них: (1) большие объемы данных могут использовать серверную ОЗУ, если вы используете управление сеансом inproc, (2) разделение переменных сеанса на нескольких серверах в ферме серверов требует дополнительных соображений и (3) профессионально разработанное приложение должно защищать от истечения срока действия сеанса (не просто передавать переменную сеанса и использовать ее - если срок действия сеанса истек, приведение бросает ошибку). Однако для подавляющего большинства приложений, переменные сессии, бесспорно путь.
Альтернативой является передача информации каждой формы в URL. Основная проблема с этим подходом заключается в том, что вам нужно быть предельно осторожным в отношении «прохождения» информации. Например, если вы собираете информацию на четырех страницах, вам нужно будет собрать информацию в первую очередь, передать ее в URL-адрес на вторую страницу, где вы должны сохранить ее в окне просмотра этой страницы. Затем, вызывая третью страницу, вы будете собирать данные формы со второй страницы плюс переменные viewstate и кодировать как в URL-адресе, так и т.д. Если у вас есть пять или более страниц или если посетитель будет прыгать по сайту, вы У тебя будет настоящий беспорядок на твоих руках. Имейте в виду также, что вся информация должна быть A) должна быть сериализована в строку с безопасным URL-адресом и B) закодирована таким образом, чтобы предотвратить простые хаки на основе URL-адресов (например, если вы поместили цену в ясный текст и передали ее вместе, кто-то может изменить цену). Обратите внимание, что вы можете уменьшить некоторые из этих проблем, создав своего рода «диспетчер сеансов» и попросите его управлять строками URL-адресов для вас, но вы все равно должны быть чрезвычайно чувствительны к возможности того, что любая данная ссылка может сбить весь сеанс пользователя, если он не управляется должным образом.
В конце я использую переменные URL только для передачи очень ограниченных данных с одной страницы на другую (например, идентификатор элемента, закодированный в ссылке на этот элемент).
Предположим, что вы действительно будете управлять данными пользователя, используя встроенные возможности сеансов. Почему кто-то скажет вам, что «Сессия зла»? Ну, в дополнение к рассмотренной выше нагрузке на память, серверной ферме и соображениям истечения, первичной критикой переменных сеанса, которые они являются, фактически, нетипизированными переменными.
К счастью, разумное использование переменных сеанса может избежать проблем с памятью (в любом случае большие базы данных должны храниться в базе данных), и если вы используете сайт, достаточно большой для работы фермы серверов, существует множество механизмов для совместного использования состояния встроенный в ASP.NET (подсказка: вы не будете использовать хранилище inproc).
Чтобы избежать практически всех остальных недостатков сеанса, я рекомендую реализовать объект для хранения данных сеанса, а также для некоторых простых функций управления объектами сеанса. Затем создайте их в потомке класса «Страница» и используйте этот дочерний класс страницы для всех ваших страниц. Тогда просто получить доступ к вашим данным сеанса через класс страницы в виде набора строго типизированных значений. Обратите внимание, что поля вашего объекта предоставят вам доступ к каждой из ваших «переменных сеанса» строго типизированным образом (например, по одному полю для каждой переменной).
Сообщите мне, если это простая задача для вас или если вы хотите получить образец кода!
связанный пост здесь: http://stackoverflow.com/questions/769338/use-of-session-in-high-traffic-websites – MedicineMan 2009-05-05 17:43:06