ASP.NET セッション管理 [例]

⚡ スマートサマリー

ASP.NET セッション管理を使用すると、ステートレスな HTTP アプリケーションでリクエスト間でユーザーデータを記憶できます。ViewState、キーと値のペアを格納する Session オブジェクト、動作例、セッション状態モード、タイムアウト設定、およびセッション状態の利点について説明します。

  • 🌐 ステートレスHTTP: HTTPはリクエスト間でデータを保持しないため、ASP.NETは状態を保持するためのメカニズムを追加しています。
  • 🗂️ ビューステート: ViewStateは、コントロールの値を自動的にあるページから次のページに引き継ぎます。
  • 🔑 セッションオブジェクト: Session[“Key”] は、アプリケーションのライフサイクル全体を通してキーと値のペアを保存および取得します。
  • ⚙️ 状態モード: セッション状態は、プロセス内、ステートサーバー、SQL Server、またはカスタムストアに保存できます。
  • 豪華<XNUMXxXNUMXF><XNUMXxXNUMXF><XNUMXxBXNUMX><XNUMXxBXNUMX>️ タイムアウト: web.config の sessionState タイムアウトは、セッションが有効な状態を維持する時間を制御します。

ASP.NETセッション管理チュートリアル(例付き)

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 説明:-

  1. 最初のコード行は、Nameテキストボックスコントロールの値を取得し、それをSessionオブジェクトに格納します。Session[“Name”]というコードを指定することで、プロパティに「Name」という名前を付けています。プロパティに名前を付けることで、後で簡単にその値を取得できるようになります。
  2. コードの次の行は、Session オブジェクトから保存された値を取得します。 次に、この値を「Response.Write」メソッド経由でクライアントに書き込みます。
  3. 最後に、フォーム上のすべてのコントロールを非表示にします。これをしないと、すべてのコントロールと応答値が一緒に表示されてしまいます。

上記の変更を行うと、以下の出力が表示されます。

出力:

セッションオブジェクトを使用する

出力から、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モードの場合)、セッションデータは失われます。
  • ユーザーごとに大量のデータを保存すると、高負荷時にパフォーマンスが低下する可能性があります。

よくあるご質問

はい。AIアシスタントは、セッション値を保存および読み取るためのコードを生成し、適切な状態モードを提案し、web.config設定を書き込むことができます。 Rev生成されたコードを確認し、拡張性とセキュリティに関するニーズに合致していることを確認してください。

はい。AIベースのコードレビューツールは、セッション固定、HTTPS専用Cookieの欠落、セッションへの機密データの保存といったリスクを検出できます。検出された内容はあくまでもガイダンスとして捉え、展開前にセキュリティテストで修正内容を確認してください。

セッション状態は単一ユーザーのセッションに関するデータを格納し、アプリケーション状態はアプリケーションのすべてのユーザーが共有するデータを格納します。ユーザーごとの値にはセッション状態を、カウンターや設定などのグローバルデータにはアプリケーション状態を使用してください。

いいえ。各ユーザーには個別のセッションが割り当てられ、クッキーに保存される固有のセッションIDによって識別されます。あるユーザーが他のユーザーのセッション値を読み取ることはできません。そのため、セッションはユーザーごとのデータに使用されます。