ASP.NET セッション管理 [例]
⚡ スマートサマリー
ASP.NET セッション管理を使用すると、ステートレスな HTTP アプリケーションでリクエスト間でユーザーデータを記憶できます。ViewState、キーと値のペアを格納する Session オブジェクト、動作例、セッション状態モード、タイムアウト設定、およびセッション状態の利点について説明します。
ASP.NETセッション管理
すべての Web アプリケーションが動作する HTTP プロトコルはステートレス プロトコルです。 ステートレスとは、あるリクエストから別のリクエストまで情報が保持されないことを意味します。
たとえば、ログイン ページに 2 つのテキスト ボックスがあり、XNUMX つは名前用、もう XNUMX つはパスワード用であるとします。そのページで [ログイン] ボタンをクリックすると、アプリケーションはユーザー名とパスワードが次のページに渡されるようにする必要があります。
ASP.Netでは、これはさまざまな方法で行われます。1つ目の方法は、ViewStateと呼ばれる概念を使用することです。ASP.Netは、すべてのコントロールの内容を自動的にここに保存します。また、この内容が次のページに渡されるようにします。これは、ViewStateというプロパティによって行われます。
開発者がビューステートで何かを変更することは理想的ではありません。 これは、ASP.Net のみで処理する必要があるためです。
ASP.NETセッションオブジェクト
もう XNUMX つは、「セッション オブジェクト」と呼ばれるオブジェクトを使用する方法です。 Session オブジェクトは、アプリケーションのライフサイクル全体を通じて使用できます。 Session オブジェクトには、キーと値のペアをいくつでも保存できます。 したがって、どのページでも、以下のコード行を使用して Session オブジェクトに値を保存できます。
Session["Key"] = value
これは値をセッションオブジェクトに格納し、「キー」部分を使用して値に名前を付けます。これにより、後で値を取得できます。値を取得するには、以下のステートメントを実行するだけです。
Session["Key"]
ASP.NETセッションオブジェクトの例
この例では、Session オブジェクトを使用して、ページ上の名前入力欄に入力された名前を保存します。次に、その値を取得し、ページ上に表示します。以下のコードを Demo.aspx.cs ファイルに追加しましょう。
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code 説明:-
- 最初のコード行は、Nameテキストボックスコントロールの値を取得し、それをSessionオブジェクトに格納します。Session[“Name”]というコードを指定することで、プロパティに「Name」という名前を付けています。プロパティに名前を付けることで、後で簡単にその値を取得できるようになります。
- コードの次の行は、Session オブジェクトから保存された値を取得します。 次に、この値を「Response.Write」メソッド経由でクライアントに書き込みます。
- 最後に、フォーム上のすべてのコントロールを非表示にします。これをしないと、すべてのコントロールと応答値が一緒に表示されてしまいます。
上記の変更を行うと、以下の出力が表示されます。
出力:
出力から、name のセッション値が取得され、ブラウザに表示されたことがわかります。
ASP.NET セッション状態モード
ASP.NET は、セッションデータを複数の場所に保存できます。これらはセッション状態モードと呼ばれます。選択するモードによって、パフォーマンス、スケーラビリティ、およびアプリケーションの再起動後にデータが保持されるかどうかが変わります。以下の表で、それらのモードを比較します。
| モード | 状態が保存される場所 | ベスト |
|---|---|---|
| 進行中 | ウェブサーバーのメモリ内(デフォルト) | シングルサーバーアプリケーション。最速だが、再起動すると動作しなくなる。 |
| ステートサーバー | 別個のASP.NETステートサービスプロセス | ウェブファーム。アプリケーションの再起動後も動作し続ける。 |
| SQLサーバー | SQL Serverデータベース | 耐久性と拡張性を備えたステートを必要とするウェブファーム |
| カスタム額装 | 実装するカスタムプロバイダー | Redisのような専門店 |
| オフ | セッション状態が無効になっています | セッションを必要としないアプリケーション |
InProcはデフォルトであり最速ですが、負荷分散されたデプロイメントでは、StateServerまたはSQLServerが複数のサーバー間でセッションを利用可能に保ちます。
ASP.NETでセッションタイムアウトを設定する方法
セッションは永久に続くものではなく、一定期間操作がないと期限切れになります。このタイムアウトは、web.config ファイルの sessionState 要素で設定できます。タイムアウト値は分単位で指定します。
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
コードで設定することもできます Session.Timeout = 30;デフォルトのタイムアウトは20分です。タイムアウトを短く設定すると、サーバーのメモリ解放が速くなり、セキュリティが向上します。一方、タイムアウトを長く設定すると、ユーザーのログイン状態がより長く維持されます。
セッション状態の利点と欠点
セッション状態は便利ですが、それに過度に依存する前に、考慮すべきトレードオフがあります。
Advantages:
- 店舗などのユーザーごとのデータを保存するのに使いやすいping カート情報またはログイン情報。
- 文字列だけでなく、複雑なオブジェクトも格納できます。
- データはサーバー上に保存されるため、クライアント側のストレージよりも安全です。
短所:
- InProcモードはサーバーのメモリを消費し、Webファーム全体にスケールしません。
- セッションのタイムアウト時、またはアプリケーションが再起動した場合(InProcモードの場合)、セッションデータは失われます。
- ユーザーごとに大量のデータを保存すると、高負荷時にパフォーマンスが低下する可能性があります。



