|
ASP.NET中的Session要比ASP中的Session靈活和強(qiáng)大很多,同時(shí)也復(fù)雜很多;看到有一些ASP.NET開發(fā)人員報(bào)怨說Session不穩(wěn)定,莫名其妙的丟失,其實(shí)這正是ASP.NET改進(jìn)的地方之一。
我們知道Session與Cookie最大的區(qū)別在于:Cookie信息全部存放于客戶端,Session則只是將一個(gè)ID存放在客戶端做為與服務(wù)端驗(yàn)證的標(biāo)記,而真正的數(shù)據(jù)都是放在服務(wù)端的內(nèi)存之中的。
在傳統(tǒng)web編程語言(比如ASP)中,session的過期完全是按照TimeOut來老老實(shí)實(shí)處理的,超時(shí)值默認(rèn)是20分鐘,但問題是:通常有很多用戶只看一眼網(wǎng)頁,然后就關(guān)瀏覽器走人了,這種情況下,服務(wù)端內(nèi)存里還長(zhǎng)久保存著Session的數(shù)據(jù),如果這種用戶很多,對(duì)服務(wù)器資源無疑是一種浪費(fèi)。
而在ASP.NET中,Session的存儲(chǔ)策略有好幾種:
默認(rèn)情況下,系統(tǒng)采用的是InProc模式,即進(jìn)程內(nèi)模式。這種情況下,Session是保存在ASP.NET工作進(jìn)程映射的內(nèi)存中的,問題是ASP.NET工作進(jìn)程為了維護(hù)良好的平均性能,會(huì)被系統(tǒng)經(jīng)常回收。我們?cè)贗IS里可以配置自動(dòng)回收(比如按時(shí)間周期回收,或者當(dāng)內(nèi)存使用達(dá)到多少值時(shí)自動(dòng)回收),如下圖即為IIS7中配置應(yīng)用程序池回收參數(shù)的界面:
當(dāng)ASP.NET工作進(jìn)程被回收時(shí),其映射的內(nèi)存全部被清空并初始化,以便其它程序可以使用,所以Session也跟著一并消失了,就這是為什么Sesssion會(huì)無故消失的主要原因。
當(dāng)然默認(rèn)的InProc模式也是性能最高的一種模式,如果您不能忍受這種“不穩(wěn)定”,可以在web.config中把mode設(shè)置為StateServer模式:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"></sessionState>
NET技術(shù):ASP.NET中如何正確使用Session,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。