[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] -[[戻る>ASP.NET]] * 目次 [#tb05e2b6] #contents *概要 [#v73a8278] 近年のWebアプリケーションではメモリの大容量化、Sessionの冗長化構成対応により、イントラネット内の業務システムでは、Sessionの使用は一般的になっている。 *設定 [#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の状態管理方式]] ---- Tags: [[:ASP.NET]], [[:ASP.NET Web Forms]], [[:ASP.NET MVC]]