【ASP.NET MVC】【IIS】セッション状態モード

■セッション状態モード

https://msdn.microsoft.com/ja-jp/library/ms178586.aspx
より

[1] InProc モード(インプロセス モード)
[2] StateServer モード
[3] SQLServer モード(インプロセス モード)
[4] Custom モード(カスタム モード)
[5] Off モード

[1] InProc モード

 * デフォルト
 * セッション状態が Web サーバーのインメモリで管理

【利点】
 * 最速

【欠点】
 * サーバーをクラスター構成にした場合、セッションを共有できない
 * アプリケーションの再起動時にセッションがクリアされてしまう★ここに注目★

[2] StateServer モード

 * 別サービス(つまり別プロセス)でセッション状態を管理
 * 設定方法は以下のサイトを参照のこと
http://www.projectgroup.info/tips/Microsoft.NET/aspx_0006.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/183aspsesout/aspsesout.html
 * シリアライズが必要なオブジェクトに関しては、Serializable属性を予め付けておく必要がある

[3] SQLServer モード

 * セッション状態を、SQL Server データベースで管理

[4] Custom モード

 * 独自のデータストア(MySQL, NoSQL etc)にセッション状態を格納
 * 以下のサイトなどを参照
* SQLServer2014のインメモリ
http://tech.sanwasystem.com/entry/2015/05/26/143145
* Memcached / Redis
http://kendik.hatenablog.com/entry/2013/05/01/224707

[5] Off モード

 * セッション状態を無効にする

■問題点

 * 上記の通り、「InProc モード」が「デフォルト」で、
   欠点は「アプリケーションの再起動時にセッションがクリアされてしまう」
 * 下記「Webアプリケーションの再起動するタイミング」の条件でWebアプリケーションは再起動し、
   セッションはクリアされてしまう
  => もし、簡単に起こってしまう場合、「InProc モード」を変更することも検討する必要がある
 * 以下のサイトも参照
http://www.ilovex.co.jp/Division/SRD/archives/2007/07/aspnet_inproc.html
http://terutomi.seesaa.net/article/14060479.html

Webアプリケーションの再起動するタイミング

http://www.atmarkit.co.jp/fdotnet/bookpreview/learnaspnet_0701/learnaspnet_0701_03.html
https://technet.microsoft.com/ja-jp/library/ee431628.aspx
より

 * Global.asaxやWeb.configが変更された場合
 * 設定されたリサイクル時間が経過した場合(デフォルトは「29 時間」)
 * サーバーメモリが大量に消費された場合(大量にアクセスされた場合など)
 * アプリケーション配下のBinフォルダーが変更された場合

# イベントログに出力するようにした方がよさそう