ASP.Netでセッションを操作する方法

HTTPはステートレスプロトコルです。これは、新しい要求がクライアントからサーバーに送信されるたびに、前の要求の状態情報が失われることを意味します。ASP.Netで状態を保存および管理するには、いくつかの方法があります。セッションオブジェクトはそれらの1つであり、他はキャッシングオブジェクトとアプリケーションオブジェクトです。

キャッシングは、システム内のリソースの消費を最小限に抑えることで、アプリケーションのパフォーマンスを向上させます。頻繁に使用するデータまたはWebページを保存して、サーバーのリソースの消費を削減することにより、アプリケーションのパフォーマンスとスループットおよびスケーラビリティを向上させることができます。

セッションは、サーバーとクライアント間の接続セッションとして定義できます。セッションオブジェクトは、ユーザーのセッションに対応するデータを保持します。セッションは、後で取得できるようにユーザー固有の情報をメモリに格納するために使用されるサーバー側の状態管理手法です。

セッションデータを保存するモード

セッションオブジェクトはサーバー側で作成および管理されます。セッションストレージモードは、セッションデータを保存する場所を決定します。セッション状態は、次のいずれかのモードで保存できます。

  1. 処理中:同じASP.Netプロセスに格納されます
  2. 状態サーバー:他のシステムに保存されている
  3. SQL Server:SQLServerデータベースに保存されます
  4. カスタム:これにより、カスタムストレージプロバイダーを使用してセッションデータを保存できます

セッションデータのストレージのIn-Procモードはデフォルトのモードであり、利用可能なすべてのストレージモードの中で最速でもあります。このモードでは、セッションデータはサーバーのメモリ(ASP.Netワーカープロセス内)に格納されます。セッションに保存する必要のあるデータの量が少なく、データを永続化する必要がない場合は、このモードを使用する必要があります。このモードで保存されたセッションデータは揮発性であることに注意してください。つまり、セッションが終了するとすぐにセッションデータが失われます。したがって、セッションが存続している限り、セッション内のデータを使用できます。

状態サーバーモードでは、セッションデータは別のプロセスに格納されます。これはASP.Net状態サービスと呼ばれます。つまり、このモードのセッションデータは、ASP.NetワーカープロセスまたはIISのアプリケーションプールの外部に格納されます。In-Procモードとは異なり、State Serverモードのセッションデータは保持されます。つまり、Webアプリケーションの再起動後に失われることはありません。

次のコードスニペットは、このモードで保存されるようにアプリケーションのセッション状態を構成する方法を示しています。

 

   

      stateConnectionString="tcpip=Server:1234"

      cookieless="false"

      timeout="20"/>

 

The SQLServer mode of session data storage is used to persist session data of your application in the SQLServer database. Similar to the State Server mode of session data storage, the SQLServer mode also enables you to persist session data of your application across application restarts. Note that you should ensure that the ASP.Net session state database is created before using this mode. You can create this database using the Aspnet_regsql.exe command line utility.

The following code snippet shows how you can configure your application to store session data in a SQLServer database.

 

   

       sqlConnectionString="data source=server;user id=joydip;[email protected]"

       cookieless="false" timeout="20" />

 

Support for Session data compression

Microsoft's ASP.Net 4 introduced a new feature: session state compression. With ASP.Net 4 and onward, you can leverage this built-in feature to compress session data for storing out-of-process sessions. To take advantage of this feature, all you need to do is set the compressionEnabled attribute to "true" in the configuration file of your application. The following code snippet illustrates how this can be configured.

  mode="SQLServer"

  stateConnectionString="some connection string..."

  compressionEnabled="true"/>

Session state enables you to store user specific data in the memory and identify a particular request uniquely.  Session data is stored as key/value pairs in the SessionStateItemCollection and can be accessed using the HttpContext.Session property.

The following code examples show how you can store and retrieve session data.

HttpSessionState.Session["UserName"] = "John"; //stores session data

string str = HttpSessionState.Session["UserName"].ToString();

// Retrieves session data

HttpSessionState.Remove("Key to remove");

//Removes an object from the session state