フォーム データを一時的に保存するための 2 つの選択肢は、1 つ目は各フォームの情報をセッション状態変数に保存すること、2 つ目は URL パラメータを使用してフォーム情報を渡すことです。Cookie を 3 番目のオプションとして使用することは、多くの訪問者が Cookie をオフにしている可能性が高いという単純な理由から、単純に機能しません (ただし、これはセッション Cookie には影響しません)。また、質問の性質上、この情報が完全にコミットされるまでデータベーステーブルに保存したくないと想定しています。
セッション変数を使用することは、この問題に対する古典的な解決策ですが、いくつかの欠点があります。これらの中には、(1) インプロセス セッション管理を使用している場合、大量のデータがサーバーの RAM を使い果たす可能性がある、(2) サーバー ファーム内の複数のサーバー間でセッション変数を共有するには、追加の考慮事項が必要である、(3) 専門的に設計されたアプリは、セッションの有効期限が切れないようにします (セッション変数をキャストして使用しないでください。セッションの有効期限が切れている場合、キャストはエラーをスローします)。ただし、大部分のアプリケーションでは、セッション変数が間違いなく最適な方法です。
別の方法は、各フォームの情報を URL で渡すことです。このアプローチの主な問題は、情報の「受け渡し」に細心の注意を払わなければならないことです。たとえば、4 つのページで情報を収集している場合、最初のページで情報を収集する必要があります。その情報を 2 番目のページに URL で渡し、そのページのビューステートに保存する必要があります。次に、3 番目のページを呼び出すときに、2 番目のページからフォーム データとビューステート変数を収集し、両方を URL にエンコードします。あなたの手に本当の混乱があるでしょう。また、すべての情報は、A) URL セーフな文字列にシリアル化され、B) 単純な URL ベースのハッキング (例: 価格を平文で入力して渡すと、誰かが価格を変更する可能性があります)。一種の「セッション マネージャ」を作成して URL 文字列を管理させることで、これらの問題の一部を軽減できることに注意してください。適切に管理されていません。
最終的に、URL 変数を使用するのは、あるページから次のページに非常に限られたデータを渡すためだけです (たとえば、そのアイテムへのリンクにエンコードされたアイテムの ID)。
それでは、組み込みのセッション機能を使用して実際にユーザーのデータを管理すると仮定しましょう。「セッションは悪だ」と誰かが言うのはなぜですか? さて、上記のメモリ負荷、サーバー ファーム、および有効期限に関する考慮事項に加えて、セッション変数は実質的に型指定されていない変数であるという主な批判があります。
幸いなことに、セッション変数を慎重に使用することで、メモリの問題を回避できます (とにかく大きな項目はデータベースに保持する必要があります)。また、サーバー ファームが必要なほど大きなサイトを実行している場合は、ASP に組み込まれている状態を共有するために利用できるメカニズムがたくさんあります。 .NET (ヒント: インプロセス ストレージは使用しません)。
Session の残りの欠点を本質的にすべて回避するために、セッション データを保持するオブジェクトといくつかの単純な Session オブジェクト管理機能を実装することをお勧めします。次に、これらを Page クラスの子孫に組み込み、この子孫 Page クラスをすべてのページに使用します。厳密に型指定された値のセットとして、ページ クラスを介してセッション データにアクセスするのは簡単なことです。オブジェクトのフィールドは、厳密に型指定された方法 (たとえば、変数ごとに 1 つのフィールド) で各「セッション変数」にアクセスする方法を提供することに注意してください。
これがあなたにとって簡単な作業なのか、それともサンプル コードが必要なのかをお知らせください。