「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>ASP.NETの状態管理方式]] * 目次 [#tb05e2b6] #contents *概要 [#v73a8278] 近年のWebアプリケーションでは -メモリの大容量化、 -Sessionの冗長化構成対応 により、イントラネット内の業務システムでは、Sessionの使用は一般的になっている。 *詳細 [#ec5f5e88] **設定 [#a4b8e4f0] Sessionの設定に関しては、web.configのsystem.web.sessionStateセクションにパラメタを設定する。 **Session timeout [#y5a42c0b] -Session timeout値のASP.NETのデフォルトは20(分)となっている。 -Session は、明示的な破棄、明示的なSession timeoutまで、メモリ上のオブジェクトが破棄されないのでメモリリークしないように注意して利用する。 **Session Cookie [#r1eb9f6a] ASP.NETのデフォルトの設定では、Sessionの識別にCookieを使用する(CookieにSessionIDを保持する)。 ***Session Cookieは揮発性 [#pd5b742f] -揮発性Cookieはプロセス内のメモリに保持されるため、ブラウザの別プロセスで共有することはできない。 --このため、複数のブラウザ プロセスを起動した場合、揮発性Cookie であるSessionID に紐付くSessionは、其々、別のSessionとして認識される。 ---しかし、IE8からタブ毎のプロセスが採用され、プロセス間でSessionIDが共有されるようになった。このため、起動パラメタを変えることでSessionIDを分離できるようになった。 --揮発性Cookieは、ブラウザが閉じられると消失するため、揮発性CookieであるSessionID に紐付くSessionも消失する。 -不揮発性Cookie(ファイルに保存できるCookie)は、ブラウザの別プロセスで共有できるが、Session Cookieは不揮発性Cookieに設定できない。 ***携帯アプリの場合 [#o2b87e20] なお、ASP.NET Mobile Web(携帯端末)の場合、端末によっては、Cookieをサポートしていないケースがあるため、SessionID(Cookie)の持ち回り方法が異なる。 web.configのsessionStateタグの定義を次のように、cookieless="true"に記述する。 <sessionState timeout="20" cookieless="true" mode="InProc"></sessionState> この場合、下記に示す様に、ASP.NET Mobile Webにより、URLにForms認証の認証チケット(Cookie)が埋め込まれる。~ http://[FQDN名]/[アプリケーション名]/S(SessionID)F(Forms認証の暗号化された認証チケット)/xxx.aspx ASP.NET Mobile Web では、URLに埋め込まれたForms認証の認証チケット(Cookie)などの情報を上手く引き継ぐために、~ 画面遷移の際は、MobilePage.RedirectToMobilePage メソッドを使用する必要がある。 **State Service・State Database [#pc09bb81] ASP.NETでは、同一プロセスだけでなく、別プロセス・サーバ(State Service)、SQL Server(State Database)などにSession情報を保存する機能もある。 **[[負荷分散(冗長化)構成とSession>ASP.NETの状態管理方式#nab90cd2]] [#d2e4d507] 障害時にもSession情報を保持したり、クラスタ構成で1人のクライアントが複数のノードに振り分けられたりする場合、~ 別プロセス・サーバ(State Service)、SQL Server(State Database)などにSession情報を保存する方式を検討する。 この場合、Sessionに格納するオブジェクトはシリアル化可能に実装する必要がある。 *参考 [#cc302cb6] **[[ASP.NETの状態管理方式]] [#haa33d74] ---- Tags: [[:.NET開発]], [[:ASP.NET]], [[:ASP.NET Web Forms]], [[:ASP.NET MVC]]