ユーザーセッションオブジェクトにどれくらいのデータを保存できる/保存すべきですか?

StackOverflow https://stackoverflow.com/questions/73008

  •  09-06-2019
  •  | 
  •  

質問

当社の Web サイトにはウィザード スタイルのフォーム アプリケーションがいくつかあり、各ページでユーザーから情報を取得し、Web サービスを使用してバックエンド プロセスに送信します。

残念ながら、各フォーム送信時に情報を分割して送信することはできないため、プロセスが終了するまでユーザー セッションに情報を保存し、すべてを同時に送信する必要があります。

ユーザーセッションに保存できる量を制限するのはサーバーメモリ/SQLサーバーディスクスペースの量のみですか、それとも他に考慮する必要があるものはありますか?

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

役に立ちましたか?

解決

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

あるいは、ビューステートを使用して情報を保存することもできますが、これによりサーバーとクライアントの間で大量のデータが送信される可能性があり、私が推奨する解決策ではありません。

保存する必要があるセッション情報の量は、アプリケーション、予想されるユーザーの数、サーバーの仕様などによって大きく異なります。より正確な答えを得るには、より多くの情報が必要です:)

最後に、プロセス全体で収集される情報がページごとに必要ではないと仮定すると、すべての情報をデータベース テーブルに保存し、レコードの一意の ID のみをセッションに保存できます。各ページが送信されるとデータベース レコードが更新され、最終ページですべての情報が取得されて送信されます。データベースの読み取り回数が必要なため、後続の各ページで以前の情報を取得する必要がある場合、これは理想的な解決策ではありません。

他のヒント

HTML フォーム全体を含む 1 つの ASP ページを作成し、ユーザーが表示されている部分を入力して「送信」するまでその一部を非表示にすることもできます。

次に、記入されている部分を非表示にして、フォームの次の部分を表示するだけです...

これは、.NET Framework では非常に簡単で、「ウィザード ステップ」ごとにパネルを使用し、各パネルをいつ表示または非表示にするかロジックを追加します。

これで、すべてのデータが 1 ページに収まります。

従来の HTTP モデル (つまり、runat="server" は使用しないでください) データを別の ASP ページに投稿し、投稿されたデータを非表示のフォーム要素に配置することができます。必要なページ数に関係なくこれを行うことができるため、セッション変数に何も配置する必要がなくなります。

ユーザーの Session オブジェクトに大量のデータを保存することはパフォーマンスの観点から問題があるため、ASP.Net は上記の投稿で述べたものに加えて、いくつかの他の回避策を提供します。 ASP.NETプロファイルプロバイダー セッション関連の情報をデータベースに保存できます。も使用できます セッション状態サーバー これは、すべてのセッション情報を保存するために別のサーバーを使用します。どちらの状況も、クラスターまたはロード バランサーを使用する必要がある場合に、サーバーが異なるサーバー間でセッション情報を認識できることを考慮しています。Http Session オブジェクトに情報を保存すると、1 人のユーザーがそのセッションで常に同じサーバーにアクセスしなければならないという問題が発生します。

セッション、ビューステート、データベース。これらはすべて遅いですが、仕事は完了します。

非表示のフォームフィールドが私が最も気に入っている答えです。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top