1、進程內會話狀態模式(InPRoc):當我們新建一個Web程序后默認的采用的進程內會話狀態模式,這也是大家所普遍采用的模式。在這種模式下會話狀態存儲在本地的 ASP.NET 輔助進程中,可以說到目前為止,進程內會話狀態模式可能是最快的訪問選項。但會話中存儲的數據越多,Web 服務器所消耗的內存就越多,這樣會潛在地增加性能降低的風險。
2、.NET 狀態服務器模式(StateServer):會話狀態存儲在遠程進程中(例如,名為 aspnet_state.exe的 indows NT 服務中)
3、SQL 模式(SQLServer):會話狀態存儲到由 SQL Server 管理的專用數據庫表中。
.NET 狀態服務器模式和SQL 模式都可以稱為進程外會話模式,當儲存數據時,需要將數據序列化儲存到外部儲備庫,當讀取和數據時,需要將數據反序列化,復制到本地會話詞典中,所以請求導致性能下降了 15%(進程外)到 25% (SQL Server)。注意這只是一種粗略的估計。但是在進程外存儲方案中,會話狀態存活的時間較長,使應用程序的功能更強大,因為它可以防止 Microsoft? Internet 信息服務 (IIS) 和ASP.NET 失敗。通過將會話狀態與應用程序相分離,您還可以更容易地將現有應用程序擴展到 Web Farm 和 Web Garden 體系結構中。另外,會話狀態存儲在外部進程中,從根本上消除了由于進程循環而導致的周期性數據丟失的風險。
在 SQL Server 模式中,也可以將會話狀態配置為在故障轉移群集中工作。故障轉移群集是兩個或更多相同的冗余 Web 服務器,它們將會話數據存儲在一臺單獨的計算機上的 SQL Server 數據庫中。如果一個 Web 服務器出現故障,群集中的另一個服務器會接管它的工作,為請求提供服務,會話數據不會丟失。
若要配置故障轉移群集,請將 Web 服務器的 Web.config 文件中的 <machinekey> 元素設置為相同的值。
然后將 Web 服務器的 SQL 連接字符串設置為指向計算機上存儲會話數據的 SQL Server 數據庫。
五、會話狀態的訪問
你可以直接通過Session集合來實現對會話狀態的訪問。為了與 ASP 的早期版本兼容,還可以通過應用程序對象上的 Session.Contents 屬性來實現對會話狀態的訪問。
dim name as string = "a" dim id as integer = "1" session("name") = name session("id") = id 第二個網頁,從Session集合獲取值 dim name as string = session("name") dim id as integer = session("id") '獲取獲取會話狀態集合中的項數 dim i as integer = session.count