■セッション状態モード
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.htmlhttps://technet.microsoft.com/ja-jp/library/ee431628.aspx
より * Global.asaxやWeb.configが変更された場合 * 設定されたリサイクル時間が経過した場合(デフォルトは「29 時間」) * サーバーメモリが大量に消費された場合(大量にアクセスされた場合など) * アプリケーション配下のBinフォルダーが変更された場合 # イベントログに出力するようにした方がよさそう