談asp.net會(huì)話狀態(tài)_.Net教程
推薦:ASP.NET MVC是怎樣實(shí)現(xiàn)自己的視圖引擎的在ASP.net MVC的一個(gè)開源項(xiàng)目MvcContrib中,為我們提供了幾個(gè)視圖引擎,例如NVelocity, Brail, NHaml, XSLT。那么如果我們想在ASP.NET MVC中實(shí)現(xiàn)我們自己的一個(gè)視圖引擎,我們應(yīng)該要怎么做呢? 我們知道呈現(xiàn)視圖是在Controller中通過傳遞視圖名和數(shù)據(jù)到Rende
一、會(huì)話狀態(tài)的功能
HTTP 是一個(gè)無狀態(tài)的協(xié)議,所以它不自動(dòng)指示一個(gè)請(qǐng)求序列是否都來自相同的客戶端,甚至不指示單個(gè)瀏覽器實(shí)例是否仍活躍地查看某個(gè)頁或站點(diǎn)。而使用ASP.net內(nèi)置的會(huì)話狀態(tài)功能,可以使用我們做到
1、對(duì)從單個(gè)瀏覽器客戶端到服務(wù)器上邏輯應(yīng)用程序會(huì)話的請(qǐng)求進(jìn)行自動(dòng)識(shí)別和分類。
2、將會(huì)話范圍的數(shù)據(jù)存儲(chǔ)在服務(wù)器上以供跨多個(gè)瀏覽器請(qǐng)求使用。
3、引發(fā)適當(dāng)?shù)目稍趹?yīng)用程序代碼中處理的會(huì)話生存期管理事件(Session_OnStart、Session_OnEnd 等)
二、會(huì)話狀態(tài)的標(biāo)識(shí)
在創(chuàng)建會(huì)話時(shí),服務(wù)器會(huì)為每一個(gè)會(huì)話生成一個(gè)單獨(dú)的標(biāo)識(shí)。該標(biāo)識(shí)用 120 位的 SessionID 字符串表示,該字符串只包含 URL 中所允許使用的 ASCII 字符。SessionID 值是使用保證唯一性和隨機(jī)性的算法生成的,其中保證唯一性的目的是確保會(huì)話不沖突,保證隨機(jī)性的目的是確保懷有惡意的用戶不能使用新的 SessionID 來計(jì)算現(xiàn)有會(huì)話的 SessionID。
三、會(huì)話狀態(tài)的存儲(chǔ)方式
會(huì)話狀態(tài)有三種存儲(chǔ)方式
1、進(jìn)程內(nèi)會(huì)話狀態(tài)模式(Inproc):當(dāng)我們新建一個(gè)Web程序后默認(rèn)的采用的進(jìn)程內(nèi)會(huì)話狀態(tài)模式,這也是大家所普遍采用的模式。在這種模式下會(huì)話狀態(tài)存儲(chǔ)在本地的 ASP.NET 輔助進(jìn)程中,可以說到目前為止,進(jìn)程內(nèi)會(huì)話狀態(tài)模式可能是最快的訪問選項(xiàng)。但會(huì)話中存儲(chǔ)的數(shù)據(jù)越多,Web 服務(wù)器所消耗的內(nèi)存就越多,這樣會(huì)潛在地增加性能降低的風(fēng)險(xiǎn)。
2、.NET 狀態(tài)服務(wù)器模式(StateServer):會(huì)話狀態(tài)存儲(chǔ)在遠(yuǎn)程進(jìn)程中(例如,名為 aspnet_state.exe的 indows NT 服務(wù)中)
3、SQL 模式(SQLServer):會(huì)話狀態(tài)存儲(chǔ)到由 SQL Server 管理的專用數(shù)據(jù)庫表中。
.NET 狀態(tài)服務(wù)器模式和SQL 模式都可以稱為進(jìn)程外會(huì)話模式,當(dāng)儲(chǔ)存數(shù)據(jù)時(shí),需要將數(shù)據(jù)序列化儲(chǔ)存到外部儲(chǔ)備庫,當(dāng)讀取和數(shù)據(jù)時(shí),需要將數(shù)據(jù)反序列化,復(fù)制到本地會(huì)話詞典中,所以請(qǐng)求導(dǎo)致性能下降了 15%(進(jìn)程外)到 25% (SQL Server)。注意這只是一種粗略的估計(jì)。但是在進(jìn)程外存儲(chǔ)方案中,會(huì)話狀態(tài)存活的時(shí)間較長,使應(yīng)用程序的功能更強(qiáng)大,因?yàn)樗梢苑乐?Microsoft? Internet 信息服務(wù) (IIS) 和ASP.NET 失敗。通過將會(huì)話狀態(tài)與應(yīng)用程序相分離,您還可以更容易地將現(xiàn)有應(yīng)用程序擴(kuò)展到 Web Farm 和 Web Garden 體系結(jié)構(gòu)中。另外,會(huì)話狀態(tài)存儲(chǔ)在外部進(jìn)程中,從根本上消除了由于進(jìn)程循環(huán)而導(dǎo)致的周期性數(shù)據(jù)丟失的風(fēng)險(xiǎn)。
四、會(huì)話狀態(tài)的配置
會(huì)話狀態(tài)的配置是通過設(shè)置Web.config文件的<sessionState>節(jié)來實(shí)現(xiàn)的。下面介紹一下三種會(huì)話狀態(tài)的具體配置方法
1、進(jìn)程內(nèi)模式
進(jìn)程內(nèi)模式是默認(rèn)的會(huì)話狀態(tài)模式。若要使用進(jìn)程內(nèi)模式,請(qǐng)將 <sessionState> 元素的 mode 屬性設(shè)置為 Inproc。
下面顯示了進(jìn)程內(nèi)模式的一個(gè)配置設(shè)置示例。 http://www.knowsky.com
|
以下為引用的內(nèi)容: <configuration> |
2、狀態(tài)服務(wù)器模式
若要使用狀態(tài)服務(wù)器,必須首先確保 ASP.NET 狀態(tài)服務(wù)運(yùn)行在用于會(huì)話存儲(chǔ)的遠(yuǎn)程服務(wù)器上。此服務(wù)與ASP.NET 和 Visual Studio .NET 一起安裝在以下位置:
|
以下為引用的內(nèi)容: systemroot\Microsoft.NET\Framework\versionNumber\aspnet_state.exe |
然后,在應(yīng)用程序的 Web.config 文件中,將 <sessionState> 元素的 mode 屬性設(shè)置為 StateServer。最后,將 connectionString 屬性設(shè)置為 tcpip=serverName:portNumber。
下面是狀態(tài)服務(wù)器模式的一個(gè)配置設(shè)置示例。
|
以下為引用的內(nèi)容: <configuration> |
3、SQL Server 模式
若要使用 SQL Server,首先在將存儲(chǔ)會(huì)話狀態(tài)的 SQL Server 計(jì)算機(jī)上,運(yùn)行 InstallSqlState.sql 或 InstallPersistSqlState.sql。兩個(gè)腳本均創(chuàng)建一個(gè)名為 ASPState 的數(shù)據(jù)庫,它包含若干存儲(chǔ)過程。
兩個(gè)腳本間的差異在于放置 ASPStateTempApplications 和 ASPStateTempSessions 表的位置。InstallSqlState.sql 腳本將這些表添加到 TempDB 數(shù)據(jù)庫,該數(shù)據(jù)庫在計(jì)算機(jī)重新啟動(dòng)時(shí)將丟失數(shù)據(jù)。相反,InstallPersistSqlState.sql 腳本將這些表添加到 ASPState 數(shù)據(jù)庫,該數(shù)據(jù)庫允許在計(jì)算機(jī)重新啟動(dòng)時(shí)保留會(huì)話數(shù)據(jù)。
默認(rèn)情況下,兩個(gè)腳本文件均安裝在下面的位置:
systemroot\Microsoft.NET\Framework\versionNumber
然后,在應(yīng)用程序的 Web.config 文件中,將 <sessionState> 元素的 mode 屬性設(shè)置為 SQLServer。最后,將 sqlConnectionString 屬性設(shè)置為 Integrated Security=SSPI;data source=serverName;。
下面顯示了 SQL Server 模式的一個(gè)配置設(shè)置示例。
|
以下為引用的內(nèi)容: <configuration> |
在 SQL Server 模式中,也可以將會(huì)話狀態(tài)配置為在故障轉(zhuǎn)移群集中工作。故障轉(zhuǎn)移群集是兩個(gè)或更多相同的冗余 Web 服務(wù)器,它們將會(huì)話數(shù)據(jù)存儲(chǔ)在一臺(tái)單獨(dú)的計(jì)算機(jī)上的 SQL Server 數(shù)據(jù)庫中。如果一個(gè) Web 服務(wù)器出現(xiàn)故障,群集中的另一個(gè)服務(wù)器會(huì)接管它的工作,為請(qǐng)求提供服務(wù),會(huì)話數(shù)據(jù)不會(huì)丟失。
分享:淺談ASP.NET中使用AJAX的簡單方法據(jù)我所知,這項(xiàng)技術(shù)最初是由Microsoft在1999年提出來的,也就是我們所熟知的使用遠(yuǎn)程調(diào)用(remote calls)的DHTML / JavaScript web應(yīng)用程序.這項(xiàng)技術(shù)的核心就是通過瀏覽器發(fā)出一個(gè)異步的HTTP請(qǐng)求來調(diào)用服務(wù)端的網(wǎng)頁或服務(wù),在返回結(jié)果后,無需刷新就可以更
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過程實(shí)現(xiàn)分頁示例代碼
- 相關(guān)鏈接:
- 教程說明:
.Net教程-談asp.net會(huì)話狀態(tài)
。