0.前置き
ASP.NETのにおけるセッション状態の管理方法についてまとめます。
本記事の内容は、ASP.NET 4.6を対象としています。
1.セッションの説明
Webアプリケーションを実現するHTTPは状態を持たない(ステートレスな)プロトコルです。そのため、「ユーザーが認証済みであること」や「ページをまたがったデータの管理」をする場合には、どこかでその状態を管理する必要があります。ASP.NETではその管理手法として、クッキー(cookie)、セッション、一時データ(TempDataやViewState)などがあります。
セッションは、サーバーサイドでデータを管理し、クライアントサイドにはそのデータへアクセスするキー(セッションID)のみを提供する(管理はクッキー)手法をとります。そのため、クッキーと比較し改ざんされる危険性が少ないため比較的安全な手法と言えます。
ASP.NETは、このセッションをサーバー上で管理する方法を4つ用意しています。
管理方法(mode名称) | 説明 |
---|---|
InProc | インプロセスモード(デフォルトの設定)。セッション情報をIISプロセス(IISアプリケーションプール)上で管理します。IISが再起動した場合は、セッション情報も消失します。簡易的なアプリケーション向け。 |
StateServer | 「ASP.NET状態サービス」というWindowsサービスのプロセスで管理します。IISとは別のプロセスで管理するため、IISを再起動したとしても、セッション状態は維持されます。また特定のIISプロセスで管理されていないため、負荷分散の構成(クラスター構成)をとっているような複数台のサーバで共通したセッション管理を行うことができます。 |
SQLServer | SQL Serverのデータベースでセッション状態を管理します。StateServerと同様のメリットがあります。 |
Custom | 開発者が定義した方法でセッション状態を管理します。上3つはマイクロソフトが事前に用意した定義です。それ以外の仕組みを利用したい場合には、自身で作成して利用することができます。例えばRedisのようなNoSQLでセッション管理を行いたい場合など。 |
Off | セッション管理を行わない設定。 |
2.定義方法
どの管理方法を選択するかという定義は、Web.configで行います。設定のサンプルは下記の通りとなります。
<configuration>
<system.web>
<sessionState mode="StateServer"
stateConnectionString="tcpip=SampleStateServer:42424"
cookieless="false"
timeout="20"/>
</system.web>
</configuration>
MSDNに詳しく説明が載っているので、参考にすると良いです。
MSDN:セッション状態モード
3.Custom用のプロバイダを設定する。
独自のプロバイダをいくつか探して設定してみます。
これは別のQiitaで書くつもりです。以下を頑張る予定。
・ASP.NETのセッション管理にAzure Redis Cacheを使ってみる
・AWS DynamoDBを使ったセッション管理