「[[マイクロソフト系技術情報 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の設定に関しては、[[Web.config>#nf687ad7]]の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"に記述する。
[[Web.config>#nf687ad7]]の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]
*参考 [#h8e057ea]
**[[ASP.NET でSessionCookie、Cookie認証Ticketを共有する方法]] [#haa33d74]

----
Tags: [[:.NET開発]], [[:ASP.NET]], [[:ASP.NET Web Forms]], [[:ASP.NET MVC]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS