54
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ASP.NETのセッション管理方法を整理する

Last updated at Posted at 2016-02-11

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を使ったセッション管理

54
60
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
54
60

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?