サーチ…


構文

  • セッション["Session_Key"] = Obj_Value;

備考

HTTPはステートレスです。 ASP.NETセッション状態は、HTTPページ要求間の状態を維持するのを容易にするフレームワークです。

セッションは、ポストバックや異なるページ間で利用可能であるという点で、クラスレベルの変数とは異なります。たとえば、Page1.aspxで作成されたセッション変数は、後で同じアプリケーション内でPage2.aspxにリダイレクトされた場合に使用できます。

また、ページ・レベルで宣言された静的変数とは異なり、セッション変数はユーザーごとに独立しています。つまり、あるユーザーのセッション変数の値を変更しても、他のユーザーの同じ変数の値には影響しません。

ViewStateはユーザーのデータを一時的に保存するために使用できますが、複数のページにデータを保存することはできません。さらに、 viewstateはページの一部であり、クライアントに送信されます。その結果、ユーザーに関連する重要な情報をViewStateに保存することはできません。それがSession変数が有用になる場所です。

Sessionオブジェクトを使用した値の格納

System.Web.SessionState.HttpSessionStateオブジェクトは、HTTP要求間で値を保持する方法を提供します。以下の例では、ユーザーの警告の設定がセッションに保存されています。その後、別のリクエストをユーザに提供している間に、アプリケーションはこのプリファレンスをセッションから読み込み、警告を非表示にすることができます。

public partial class Default : System.Web.UI.Page
{
    public void LoadPreferences(object sender, EventArgs args)
    {
        // ... 
        // ... A DB operation that loads the user's preferences.
        // ...

        // Store a value with the key showWarnings
        HttpContext.Current.Session["showWarnings"] = false;
    }

    public void button2Clicked(object sender, EventArgs args)
    {
        // While processing another request, access this value.
        bool showWarnings = (bool)HttpContext.Current.Session["showWarnings"];
        lblWarnings.Visible = false;
    }
}    

セッション変数は(クッキーのように)すべてのユーザーに共通ではなく、複数のポストバックにまたがって保持されることに注意してください。

セッションは、ユーザーセッションの識別子を含むCookieを設定することによって機能します。デフォルトでは、この識別子はWebサーバのメモリに格納されている値とともに格納されます。

セッションを追跡するためにユーザーのブラウザに設定されたCookieのスクリーンショットを以下に示します。

sessionStateCookie

SQLセッションストアの使用

セッション状態を共有する必要がある複数のサーバーがある場合、ASP.NETプロセスメモリに格納することはできません。たとえば、ラウンドロビン方式で要求を分散するロードバランサを使用してWebファーム環境に展開することができます。この環境では、単一のユーザーの要求が複数のサーバーによって処理される可能性があります。

web.configファイルでは、SQLサーバーセッションストアを構成できます。

<configuration>
  <system.web>
    <sessionState 
      mode="SQLServer"
      sqlConnectionString="Data Source=localhost;Integrated Security=SSPI"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

SQLスキーマを作成するには、aspnet_regsqlツールを使用します。 [SampleSqlServerName]はSQLサーバーのホスト名です。 -ssaddは、ツールにセッション状態データベースを作成するよう指示します。 -sstype pは、デフォルト名ASPStateで新しいデータベースを作成するようにツールに指示します。

aspnet_regsql.exe -S [SampleSqlServerName] -U [Username] -P [Password] -ssadd -sstype p

Amazon DynamoDBセッションストアの使用

SQL Serverを使用したくない場合は、AmazonのホストされているDynamo DB nosqlデータベースをセッションストアとして使用できます。

AWS SDKが必要です。これをVisual Studioのnugetパッケージマネージャコンソールからインストールするには、次のコマンドを使用します

Install-Package AWSSDK 

次に、カスタムプロバイダを使用するようにsessionStateプロバイダをコンフィグレーションできます。リージョンとクレデンシャル、プロファイルまたはIAMアクセスと秘密鍵の組み合わせを指定する必要があります。既定では、ASP.NET_SessionStateという名前のテーブルが作成されます。

<configuration>
  <system.web>
    <sessionState
      timeout="20"
      mode="Custom"
      customProvider="DynamoDBSessionStoreProvider">
      <providers>
        <add name="DynamoDBSessionStoreProvider"
             type="Amazon.SessionProvider.DynamoDBSessionStateStore"
             AWSProfileName="[PROFILE]"
             Region="[REGION]"
             CreateIfNotExist="true"
             />
      </providers>
    </sessionState>
  </system.web>
</configuration>


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow