2008-09-16 17 views
8

当社のWebサイトには、各ページのユーザーからの情報を取得し、Webサービスを使用してバックエンドプロセスに送信するウィザード形式のアプリケーションがいくつかあります。我々は、プロセスの最後までそれをユーザーのセッションを保存すると同時に、それをすべてを提出する必要がありますのでユーザーセッションオブジェクトに保存できるデータ量は?

残念ながら、私たちは、各フォーム送信時にチャンクに情報を提出することはできません。

は、私は、ユーザーセッションに保存することができますどのくらい上の唯一の制約サーバーメモリ/ SQL Serverのディスク・スペースの量ですか私は考慮する必要がある何か他のものはありますか?

編集:このサイトは、ASP.NET Webフォームで構築されています。

+0

各フォームのpostdataをasp.netでデイジーチェーン接続できます。runat = serverを削除して別の.netページに投稿するだけです。 – mmattax

答えて

3

情報が機密ではないと仮定すると、情報をクッキーに保存して、サーバー側に保存する必要がある情報の量を削減できます。これにより、JavaScript経由で情報にアクセスすることもできます。

これは、サーバーとクライアントではなく、私の好適な解決策の間で送信される大量のデータにつながることができますが、代わりにあなたが情報を保存するためにビューステートを使用することができます。

あなたが保存すべきセッション情報の量が乱暴アプリケーションによって異なり、より正確な答えを与えることが期待ユーザー、サーバーの仕様などの数がより多くの情報が必要になります:)最後に

、その情報を仮定すべての情報をデータベーステーブルに格納し、レコードの一意のIDのみをセッションに格納することができます。各ページが提出されると、dbレコードが更新され、最後のページにすべての情報が取得され、提出されます。これは、必要なdb読み込みの数のために、後続の各ページで以前の情報を取得する必要がある場合、アイデアの解決策ではありません。

0

あなたは伝統的なHTTPモデルを使用している場合は、隠されたフォーム要素にポストされたデータを別のASPページにデータを投稿して置くことができる(すなわちにrunat =「server」を使用していない)、あなたはしかし、多くのページのためにこれを行うことができますセッション変数に何かを配置する必要はありません。

2

あなたはまた、全体のHTMLフォームで1つのASPページを持っているし、ユーザーが記入し、目に見える部分を「提出」までの部分を隠し...

ができ、単純に記入された部分を隠し、これは、.NET Frameworkで極めて容易でそれぞれ「ウィザードのステップ」の使用パネルと各パネルを表示し、非表示にするときloggicを追加することになり...

をフォームの次の部分を示しています。

これで、すべてのデータが1ページに表示されます。

0

それがユーザセッションオブジェクトに大量のデータを格納するためにパフォーマンスの観点から問題があるので、ASP.Netは、上記ポストに記載されているものの上に他のいくつかの回避策を提供します。 ASP.NET Profile Providerを使用すると、セッション関連の情報をデータベースに保存できます。別のサーバーを使用してすべてのセッション情報を格納するSession State Serverを使用することもできます。クラスタまたはロードバランサを使用する必要がある場合は、これらの状況が考慮されますが、サーバは異なるサーバ間でセッション情報を認識できます。 Http Sessionオブジェクトに情報を格納する場合、あるユーザーが常にそのセッションの同じサーバーに移動する必要があるという問題が発生します。

0

セッション、viewstate、データベース。これらはすべて遅いですが、仕事を終わらせるでしょう。

隠しフォームフィールドは私が一番好きな答えです。

状態を永続化する方法は他にもあります。クッキー、ポップアップウィンドウ、フレームセット、またはiframe。