在上一篇中作者給大家詳細(xì)介紹了 ASP 內(nèi)建對(duì)象 Response 的使用方法,在這一篇中作者將繼續(xù)給大家介紹另兩個(gè)非常實(shí)用且重要的 ASP 的內(nèi)建對(duì)象 Application 和 Session。
在 ASP 的內(nèi)建對(duì)象中除了用于發(fā)送、接收和處理數(shù)據(jù)的對(duì)象外,還有一些非常實(shí)用的代表 Active Server 應(yīng)用程序和單個(gè)用戶信息的對(duì)象。
讓我們先來(lái)看看 Application 對(duì)象。在同一虛擬目錄及其子目錄下的所有 .asp 文件構(gòu)成了 ASP 應(yīng)用程序。我們非但可以使用 Application 對(duì)象,在給定的應(yīng)用程序的所有用戶之間共享信息,并在服務(wù)器運(yùn)行期間持久的保存數(shù)據(jù)。而且,Application 對(duì)象還有控制訪問(wèn)應(yīng)用層數(shù)據(jù)的方法和可用于在應(yīng)用程序啟動(dòng)和停止時(shí)觸發(fā)過(guò)程的事件。
下面就讓我們一起來(lái)學(xué)習(xí) Application 對(duì)象。
一、屬性
雖然 Application 對(duì)象沒(méi)有內(nèi)置的屬性,但我們可以使用以下句法設(shè)置用戶定義的屬性也可稱為集合。
Application(" 屬性 / 集合名稱 ")= 值
我們可以使用如下腳本聲明并建立 Application 對(duì)象的屬性。
%
Application("MyVar") = "Hello"
Set Application("MyObj") = Server.CreateObject("MyComponent")
%>
一旦我們分配了 Application 對(duì)象的屬性,它就會(huì)持久地存在,直到關(guān)閉 WEB 服務(wù)器服務(wù)使得 Application 停止。由于存儲(chǔ)在 Application 對(duì)象中的數(shù)值可以被應(yīng)用程序的所有用戶讀取,所以 Application 對(duì)象的屬性特別適合在應(yīng)用程序的用戶之間傳遞信息。
二、方法
Application 對(duì)象有兩個(gè)方法,它們都是用于處理多個(gè)用戶對(duì)存儲(chǔ)在 Application 中的數(shù)據(jù)進(jìn)行寫(xiě)入的問(wèn)題
1、Lock 方法禁止其他客戶修改 Application 對(duì)象的屬性。
Lock 方法阻止其他客戶修改存儲(chǔ)在 Application 對(duì)象中的變量,以確保在同一時(shí)刻僅有一個(gè)客戶可修改和存取 Application 變量。如果用戶沒(méi)有明確調(diào)用 Unlock 方法,則服務(wù)器將在 .asp 文件結(jié)束或超時(shí)后即解除對(duì) Application 對(duì)象的鎖定。
讓我們來(lái)看看下面這段用 Application 來(lái)記錄頁(yè)面訪問(wèn)次數(shù)的程序 :
%
Dim NumVisitsNumVisits=0
Application.LockApplication("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
歡迎光臨本網(wǎng)頁(yè),你是本頁(yè)的第 %= Application("NumVisits") %> 位訪客 !
將以上腳本保存在你的 .asp 文件中,就輕而易舉地給你的頁(yè)面添加了一個(gè)計(jì)數(shù)器。
2、和 Lock 方法相反,Unlock 方法允許其他客戶修改 Application 對(duì)象的屬性。
在上面的例子中,上述例子中,Unlock 方法解除對(duì)象的鎖定,使得下一個(gè)客戶端能夠增加 NumVisits 的值。
三、事件
1、Application_OnStart
Application_OnStart 事件在首次創(chuàng)建新的會(huì)話 ( 即 Session_OnStart 事件 ) 之前發(fā)生。當(dāng) WEB 服務(wù)器啟動(dòng)并允許對(duì)應(yīng)用程序所包含的文件進(jìn)行請(qǐng)求時(shí)就觸發(fā) Application_OnStart 事件。Application_OnStart 事件的處理過(guò)程必須寫(xiě)在 Global.asa 文件之中。
Application_OnStart 事件的語(yǔ)法如下 :
SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>
Sub Application_OnStart. . .
End Sub
/SCRIPT>
2、Application_OnEnd
Application_OnEnd 事件在應(yīng)用程序退出時(shí)于 Session_OnEnd 事件之后發(fā)生,Application_OnEnd 事件的處理過(guò)程也必須寫(xiě)在 Global.asa 文件之中。
下面讓我們來(lái)看看在使用 Application 對(duì)象時(shí)必須注意的事項(xiàng)。
不能在 Application 對(duì)象中存儲(chǔ) ASP 內(nèi)建對(duì)象。例如,下面的每一行都返回一個(gè)錯(cuò)誤。
%
Set Application("var1")=Session
Set Application("var2")=Request
Set Application("var3")=Response
Set Application("var4")=Server
Set Application("var5")=Application
Set Application("var6")=ObjectContext
%>
若您將一個(gè)數(shù)組存儲(chǔ)在 Application 對(duì)象中,請(qǐng)不要直接更改存儲(chǔ)在數(shù)組中的元素。例如,下列的腳本無(wú)法運(yùn)行。
% Application("StoredArray")(3) = "new value" %>
這是因?yàn)?Application 對(duì)象是作為集合被實(shí)現(xiàn)的。數(shù)組元素 StoredArray(3) 未獲得新的賦值。而此值將包含在 Application 對(duì)象集合中,并將覆蓋此位置以前存儲(chǔ)的任何信息。建議您在將數(shù)組存儲(chǔ)在 Application 對(duì)象中時(shí),在檢索或改變數(shù)組中的對(duì)象前獲取數(shù)組的一個(gè)副本。在對(duì)數(shù)組操作時(shí),您應(yīng)再將數(shù)組全部存儲(chǔ)在 Application 對(duì)象中,這樣您所做的任何改動(dòng)將被存儲(chǔ)下來(lái)。下列的腳本對(duì)此進(jìn)行演示。
---asp8a.asp---
%
dim MyArray()
Redim MyArray(5)
MyArray(0)="hello"
MyArray(1)="some other string"
Application.Lock
Application("StoredArray")=MyArray
Application.Unlock
Response.Redirect "asp8b.asp"
%>
---asp8b.asp---
%
LocalArray=Application("StoredArray")
LocalArray(1)=" there"
Response.Write LocalArray(0)LocalArray(1)
Application.Lock
Application("StoredArray")=LocalArray
Application.Unlock
%>
與 Application 對(duì)象具有相近作用的另一個(gè)非常實(shí)用的 ASP 內(nèi)建對(duì)象就是 Session。我們可以使用 Session 對(duì)象存儲(chǔ)特定的用戶會(huì)話所需的信息。當(dāng)用戶在應(yīng)用程序的頁(yè)之間跳轉(zhuǎn)時(shí),存儲(chǔ)在 Session 對(duì)象中的變量不會(huì)清除,而用戶在應(yīng)用程序中訪問(wèn)頁(yè)面時(shí),這些變量始終存在。當(dāng)用戶請(qǐng)求來(lái)自應(yīng)用程序的 Web 頁(yè)時(shí),如果該用戶還沒(méi)有會(huì)話,則 Web 服務(wù)器將自動(dòng)創(chuàng)建一個(gè) Session 對(duì)象。當(dāng)會(huì)話過(guò)期或被放棄后,服務(wù)器將終止該會(huì)話。
通過(guò)向客戶程序發(fā)送唯一的 Cookie 可以管理服務(wù)器上的 Session 對(duì)象。當(dāng)用戶第一次請(qǐng)求 ASP 應(yīng)用程序中的某個(gè)頁(yè)面時(shí),ASP 要檢查 HTTP 頭信息,查看是否有在報(bào)文中有名為 ASPSESSIONID 的 Cookie 發(fā)送過(guò)來(lái),如果有,則服務(wù)器會(huì)啟動(dòng)新的會(huì)話,并為該會(huì)話生成一個(gè)全局唯一的值,在把這個(gè)值作為新 ASPSESSIONID Cookie 的值發(fā)送給客戶端,正是使用這種 Cookie,可以訪問(wèn)存儲(chǔ)在服務(wù)器上的屬于客戶程序的信息。Session 對(duì)象最常見(jiàn)的作用就是存儲(chǔ)用戶的首選項(xiàng)。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲(chǔ)在 Session 對(duì)象中。另外其還經(jīng)常被用在鑒別客戶身份的程序中。要注意的是,會(huì)話狀態(tài)僅在支持 cookie 的瀏覽器中保留,如果客戶關(guān)閉了 Cookie 選項(xiàng),Session 也就不能發(fā)揮作用了。
一、屬性
1、SessionID
SessionID 屬性返回用戶的會(huì)話標(biāo)識(shí)。在創(chuàng)建會(huì)話時(shí),服務(wù)器會(huì)為每一個(gè)會(huì)話生成一個(gè)單獨(dú)的標(biāo)識(shí)。會(huì)話標(biāo)識(shí)以長(zhǎng)整形數(shù)據(jù)類型返回。在很多情況下 SessionID 可以用于 WEB 頁(yè)面注冊(cè)統(tǒng)計(jì)。
2、TimeOut
Timeout 屬性以分鐘為單位為該應(yīng)用程序的 Session 對(duì)象指定超時(shí)時(shí)限。如果用戶在該超時(shí)時(shí)限之內(nèi)不刷新或請(qǐng)求網(wǎng)頁(yè),則該會(huì)話將終止。
二、方法
Session 對(duì)象僅有一個(gè)方法,就是 Abandon,Abandon 方法刪除所有存儲(chǔ)在 Session 對(duì)象中的對(duì)象并釋放這些對(duì)象的源。如果您未明確地調(diào)用 Abandon 方法,一旦會(huì)話超時(shí),服務(wù)器將刪除這些對(duì)象。當(dāng)服務(wù)器處理完當(dāng)前頁(yè)時(shí),下面示例將釋放會(huì)話狀態(tài)。
% Session.Abandon %>
三、事件
Session 對(duì)象有兩個(gè)事件可用于在 Session 對(duì)象啟動(dòng)和釋放是運(yùn)行過(guò)程。
1、Session_OnStart 事件在服務(wù)器創(chuàng)建新會(huì)話時(shí)發(fā)生。服務(wù)器在執(zhí)行請(qǐng)求的頁(yè)之前先處理該腳本。Session_OnStart 事件是設(shè)置會(huì)話期變量的最佳時(shí)機(jī),因?yàn)樵谠L問(wèn)任何頁(yè)之前都會(huì)先設(shè)置它們。
盡管在 Session_OnStart 事件包含 Redirect 或 End 方法調(diào)用的情況下 Session 對(duì)象仍會(huì)保持,然而服務(wù)器將停止處理 Global.asa 文件并觸發(fā) Session_OnStart 事件的文件中的腳本。
為了確保用戶在打開(kāi)某個(gè)特定的 Web 頁(yè)時(shí)始終啟動(dòng)一個(gè)會(huì)話,就可以在 Session_OnStart 事件中調(diào)用 Redirect 方法。當(dāng)用戶進(jìn)入應(yīng)用程序時(shí),服務(wù)器將為用戶創(chuàng)建一個(gè)會(huì)話并處理 Session_OnStart 事件腳本。您可以將腳本包含在該事件中以便檢查用戶打開(kāi)的頁(yè)是不是啟動(dòng)頁(yè),如果不是,就指示用戶調(diào)用 Response.Redirect 方法啟動(dòng)網(wǎng)頁(yè)。程序如下 :
SCRIPT RUNAT=Server Language=VBScript>
Sub Session_OnStart
startPage = "/MyApp/StartHere.asp"
currentPage = Request.ServerVariables("SCRIPT_NAME")
if strcomp(currentPage,startPage,1) then
Response.Redirect(startPage)
end if
End Sub
/SCRIPT>
上述程序只能在支持 cookie 的瀏覽器中運(yùn)行。因?yàn)椴恢С?cookie 的瀏覽器不能返回 SessionID cookie,所以,每當(dāng)用戶請(qǐng)求 Web 頁(yè)時(shí),服務(wù)器都會(huì)創(chuàng)建一個(gè)新會(huì)話。這樣,對(duì)于每個(gè)請(qǐng)求服務(wù)器都將處理 Session_OnStart 腳本并將用戶重定向到啟動(dòng)頁(yè)中。
2、Session_OnEnd 事件在會(huì)話被放棄或超時(shí)發(fā)生。
關(guān)于使用 Session 對(duì)象需要注意的事項(xiàng) Application 對(duì)象相近,請(qǐng)參照前文。
會(huì)話可以通過(guò)以下三種方式啟動(dòng) :
1、一個(gè)新用戶請(qǐng)求訪問(wèn)一個(gè) URL,該 URL 標(biāo)識(shí)了某個(gè)應(yīng)用程序中的 .asp 文件,并且該應(yīng)用程序的 Global.asa 文件包含 Session_OnStart 過(guò)程。
2、用戶在 Session 對(duì)象中存儲(chǔ)了一個(gè)值。
3、用戶請(qǐng)求了一個(gè)應(yīng)用程序的 .asp 文件,并且該應(yīng)用程序的Global.asa 文件使用 OBJECT> 標(biāo)簽創(chuàng)建帶有會(huì)話作用域的對(duì)象的實(shí)例。
如果用戶在指定時(shí)間內(nèi)沒(méi)有請(qǐng)求或刷新應(yīng)用程序中的任何頁(yè),會(huì)話將自動(dòng)結(jié)束。這段時(shí)間的默認(rèn)值是 20 分鐘??梢酝ㄟ^(guò)在 Internet 服務(wù)管理器中設(shè)置“應(yīng)用程序選項(xiàng)”屬性頁(yè)中的“會(huì)話超時(shí)”屬性改變應(yīng)用程序的默認(rèn)超時(shí)限制設(shè)置。應(yīng)依據(jù)您的 Web 應(yīng)用程序的要求和服務(wù)器的內(nèi)存空間來(lái)設(shè)置此值。例如,如果您希望瀏覽您的 Web 應(yīng)用程序的用戶在每一頁(yè)僅停留幾分鐘,就應(yīng)該縮短會(huì)話的默認(rèn)超時(shí)值。過(guò)長(zhǎng)的會(huì)話超時(shí)值將導(dǎo)致打開(kāi)的會(huì)話過(guò)多而耗盡您的服務(wù)器的內(nèi)存資源。對(duì)于一個(gè)特定的會(huì)話,如果您想設(shè)置一個(gè)小于默認(rèn)超時(shí)值的超時(shí)值,可以設(shè)置 Session 對(duì)象的 Timeout 屬性。例如,下面這段腳本將超時(shí)值設(shè)為 5 分鐘。
% Session.Timeout = 5 %>
當(dāng)然你也可以設(shè)置一個(gè)大于默認(rèn)設(shè)置的超時(shí)值,Session.Timeout 屬性決定超時(shí)值。你還可以通過(guò) Session 對(duì)象的 Abandon 方法顯式結(jié)束一個(gè)會(huì)話。例如,在表格中提供一個(gè)“退出”按鈕,將按鈕的 ACTION 參數(shù)設(shè)置為包含下列命令的 .asp 文件的 URL。
% Session.Abandon %>
今天,我們學(xué)習(xí)了兩個(gè)在WEB 頁(yè)面特別是基于WEB 的BBS 或Chat 上經(jīng)常使用 ASP 內(nèi)建對(duì)象,由于這兩個(gè)對(duì)象在實(shí)際運(yùn)用中很實(shí)用,因此在下一篇中作者將運(yùn)用至此我們所學(xué)過(guò)的4 個(gè)ASP 內(nèi)建對(duì)象,給大家演示一個(gè)完整的 ASP 應(yīng)用程序,相信通過(guò)這個(gè)練習(xí),能大大加深你對(duì) ASP 應(yīng)用程序的理解和掌握。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)ASP內(nèi)建對(duì)象Application和Session有所幫助。
您可能感興趣的文章:- ASP編程入門進(jìn)階(九):內(nèi)置對(duì)象Application
- javascript asp教程第十一課--Application 對(duì)象
- asp清空application的方法
- ASP javascript Application對(duì)象的Contents和StaticObjects做Cache的一些經(jīng)驗(yàn)
- asp之讓Session永不過(guò)期
- ASP.NET內(nèi)置對(duì)象之Application對(duì)象
- asp.net Reporting Service在Web Application中的應(yīng)用
- php和asp利用Shell.Application來(lái)執(zhí)行程序的代碼
- ASP.NET Session使用詳解
- ASP所有的Session變量獲取實(shí)現(xiàn)代碼
- asp自帶的內(nèi)存緩存 application
- ASP.NET中Application和Cache的區(qū)別分析
- ASP中Session技巧 默認(rèn)過(guò)期時(shí)間為20分鐘
- asp中設(shè)置session過(guò)期時(shí)間方法總結(jié)
- asp.net錯(cuò)誤處理Application_Error事件示例
- ASP.NET 使用application與session對(duì)象寫(xiě)的簡(jiǎn)單聊天室程序
- asp.net網(wǎng)站防惡意刷新的Cookies與Session解決方法
- ASP.NET中Session和Cache的區(qū)別總結(jié)