在上一篇中作者給大家詳細介紹了 ASP 內建對象 Response 的使用方法,在這一篇中作者將繼續給大家介紹另兩個非常實用且重要的 ASP 的內建對象 Application 和 Session。 在 ASP 的內建對象中除了用於發送、接收和處理資料的對象外,還有一些非常實用的代表 Active Server 應用程式和單個使用者資訊的對象。
讓我們先來看看 Application 對象。在同一虛擬目錄及其子目錄下的所有 .asp 檔案構成了 ASP 應用程式。我們非但可以使用 Application 對象,在給定的應用程式的所有使用者之間共用資訊,並在伺服器運行期間持久的儲存資料。而且,Application 對象還有控制訪問應用程式層資料的方法和可用於在應用程式啟動和停止時觸發過程的事件。
下面就讓我們一起來學習 Application 對象。
一、屬性
雖然 Application 對象沒有內建的屬性,但我們可以使用以下句法設定使用者定義的屬性也可稱為集合。
Application(" 屬性 / 集合名稱 ")= 值
我們可以使用如下指令碼聲明並建立 Application 對象的屬性。
< %
Application("MyVar") = "Hello"
Set Application("MyObj") = Server.CreateObject("MyComponent")
%>
一旦我們分配了 Application 對象的屬性,它就會持久地存在,直到關閉 WEB 伺服器服務使得 Application 停止。由於儲存在 Application 對象中的數值可以被應用程式的所有使用者讀取,所以 Application 對象的屬性特別適合在應用程式的使用者之間傳遞資訊。
二、方法
Application 對象有兩個方法,它們都是用於處理多個使用者對儲存在 Application 中的資料進行寫入的問題
1、Lock 方法禁止其他客戶修改 Application 對象的屬性。
Lock 方法阻止其他客戶修改儲存在 Application 對象中的變數,以確保在同一時刻僅有一個客戶可修改和存取 Application 變數。如果使用者沒有明確調用 Unlock 方法,則伺服器將在 .asp 檔案結束或逾時後即解除對 Application 對象的鎖定。
讓我們來看看下面這段用 Application 來記錄頁面訪問次數的程式 :
< %
Dim NumVisitsNumVisits=0
Application.LockApplication("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
歡迎光臨本網頁,你是本頁的第 < %= Application("NumVisits") %> 位訪客 !
將以上指令碼儲存在你的 .asp 檔案中,就輕而易舉地給你的頁面添加了一個計數器。
2、和 Lock 方法相反,Unlock 方法允許其他客戶修改 Application 對象的屬性。
在上面的例子中,上述例子中,Unlock 方法解除對象的鎖定,使得下一個用戶端能夠增加 NumVisits 的值。
三、事件
1、Application_OnStart
Application_OnStart 事件在首次建立新的會話 ( 即 Session_OnStart 事件 ) 之前發生。當 WEB 伺服器啟動並允許對應用程式所包含的檔案進行請求時就觸發 Application_OnStart 事件。Application_OnStart 事件的處理過程必須寫在 Global.asa 檔案之中。
Application_OnStart 事件的文法如下 :
< SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>
Sub Application_OnStart. . .
End Sub
< /SCRIPT>
2、Application_OnEnd
Application_OnEnd 事件在應用程式退出時於 Session_OnEnd 事件之後發生,Application_OnEnd 事件的處理過程也必須寫在 Global.asa 檔案之中。
下面讓我們來看看在使用 Application 對象時必須注意的一些事項。
不能在 Application 對象中儲存 ASP 內建對象。例如,下面的每一行都返回一個錯誤。
< %
Set Application("var1")=Session
Set Application("var2")=Request
Set Application("var3")=Response
Set Application("var4")=Server
Set Application("var5")=Application
Set Application("var6")=ObjectContext
%>
若您將一個數組儲存在 Application 對象中,請不要直接更改儲存在數組中的元素。例如,下列的指令碼無法運行。
< % Application("StoredArray")(3) = "new value" %>
這是因為 Application 對象是作為集合被實現的。數組元素 StoredArray(3) 未獲得新的賦值。而此值將包含在 Application 對象集合中,並將覆蓋此位置以前儲存的任何資訊。建議您在將數組儲存在 Application 對象中時,在檢索或改變數組中的對象前擷取數組的一個副本。在對數組操作時,您應再將數組全部儲存在 Application 對象中,這樣您所做的任何改動將被儲存下來。下列的指令碼對此進行示範。
---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 對象具有相近作用的另一個非常實用的 ASP 內建對象就是 Session。我們可以使用 Session Object Storage Service特定的使用者會話所需的資訊。當使用者在應用程式的頁之間跳轉時,儲存在 Session 對象中的變數不會清除,而使用者在應用程式中訪問頁面時,這些變數始終存在。當使用者請求來自應用程式的 Web 頁時,如果該使用者還沒有會話,則 Web 服務器將自動建立一個 Session 對象。當會話到期或被放棄後,伺服器將終止該會話。 通過向客戶程式發送唯一的 Cookie 可以管理伺服器上的 Session 對象。當使用者第一次請求 ASP 應用程式中的某個頁面時,ASP 要檢查 HTTP 頭資訊,查看是否有在報文中有名為 ASPSESSIONID 的 Cookie 發送過來,如果有,則伺服器會啟動新的會話,並為該會話產生一個全域唯一的值,在把這個值作為新 ASPSESSIONID Cookie 的值發送給用戶端,正是使用這種 Cookie,可以訪問儲存在伺服器上的屬於客戶程式的資訊。Session 對象最常見的作用就是儲存使用者的喜好設定。例如,如果使用者指明不喜歡查看圖形,就可以將該資訊儲存在 Session 對象中。另外其還經常被用在鑒別客戶身份的程式中。要注意的是,工作階段狀態僅在支援 cookie 的瀏覽器中保留,如果客戶關閉了 Cookie 選項,Session 也就不能發揮作用了。
一、屬性
1、SessionID
SessionID 屬性返回使用者的會話標識。在建立會話時,伺服器會為每一個會話產生一個單獨的標識。會話標識以長整形資料類型返回。在很多情況下 SessionID 可以用於 WEB 頁面註冊統計。
2、TimeOut
Timeout 屬性以分鐘為單位為該應用程式的 Session 對象指定逾時時限。如果使用者在該逾時時限之內不重新整理或請求網頁,則該會話將終止。
二、方法
Session 對象僅有一個方法,就是 Abandon,Abandon 方法刪除所有儲存在 Session 對象中的對象並釋放這些對象的源。如果您未明確地調用 Abandon 方法,一旦會話逾時,伺服器將刪除這些對象。當伺服器處理完當前頁時,下面樣本將釋放工作階段狀態。
< % Session.Abandon %>
三、事件
Session 對象有兩個事件可用於在 Session 對象啟動和釋放是運行過程。
1、Session_OnStart 事件在伺服器建立新會話時發生。伺服器在執行請求的頁之前先處理該指令碼。Session_OnStart 事件是設定會話期變數的最佳時機,因為在訪問任何頁之前都會先設定它們。
儘管在 Session_OnStart 事件包含 Redirect 或 End 方法調用的情況下 Session 對象仍會保持,然而伺服器將停止處理 Global.asa 檔案並觸發 Session_OnStart 事件的檔案中的指令碼。
為了確保使用者在開啟某個特定的 Web 頁時始終啟動一個會話,就可以在 Session_OnStart 事件中調用 Redirect 方法。當使用者進入應用程式時,伺服器將為使用者建立一個會話並處理 Session_OnStart 事件指令碼。您可以將指令碼包含在該事件中以便檢查使用者開啟的頁是不是啟動頁,如果不是,就指示使用者調用 Response.Redirect 方法啟動網頁。程式如下 :
< 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 的瀏覽器中運行。因為不支援 cookie 的瀏覽器不能返回 SessionID cookie,所以,每當使用者請求 Web 頁時,伺服器都會建立一個新會話。這樣,對於每個請求伺服器都將處理 Session_OnStart 指令碼並將使用者重新導向到啟動頁中。
2、Session_OnEnd 事件在會話被放棄或逾時發生。
關於使用 Session 對象需要注意的事項 Application 對象相近,請參照前文。
會話可以通過以下三種方式啟動 :
1、一個新使用者請求訪問一個 URL,該 URL 標識了某個應用程式中的 .asp 檔案,並且該應用程式的 Global.asa 檔案包含 Session_OnStart 過程。
2、使用者在 Session 對象中儲存了一個值。
3、使用者請求了一個應用程式的 .asp 檔案,並且該應用程式的Global.asa 檔案使用 < OBJECT> 標籤建立帶有會話範圍的對象的執行個體。
如果使用者在指定時間內沒有請求或重新整理應用程式中的任何頁,會話將自動結束。這段時間的預設值是 20 分鐘。可以通過在 網際網路服務管理員中設定“應用程式選項”屬性頁面中的“會話逾時”屬性改變應用程式的預設逾時限制設定。應依據您的 Web 應用程式的要求和伺服器的記憶體空間來設定此值。例如,如果您希望瀏覽您的 Web 應用程式的使用者在每一頁僅停留幾分鐘,就應該縮短會話的預設逾時值。過長的會話逾時值將導致開啟的會話過多而耗盡您的伺服器的記憶體資源。對於一個特定的會話,如果您想設定一個小於預設逾時值的逾時值,可以設定 Session 對象的 Timeout 屬性。例如,下面這段指令碼將逾時值設為 5 分鐘。
< % Session.Timeout = 5 %>
當然你也可以設定一個大於預設設定的逾時值,Session.Timeout 屬性決定逾時值。你還可以通過 Session 對象的 Abandon 方法顯式結束一個會話。例如,在表格中提供一個“退出”按鈕,將按鈕的 ACTION 參數設定為包含下列命令的 .asp 檔案的 URL。
< % Session.Abandon %>
今天,我們學習了兩個在 WEB 頁面特別是基於 WEB 的 BBS 或 Chat 上經常使用 ASP 內建對象,由於這兩個對象在實際運用中很實用,因此在下一篇中作者將運用至此我們所學過的 4 個 ASP 內建對象,給大家示範一個完整的 ASP 應用程式,相信通過這個練習,能大大加深你對 ASP 應用程式的理解和掌握。敬請關注“動態網站設計十八般武藝 --ASP 篇 (9)”。