在上一篇中作者給大家詳細介紹了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、Applicati
on_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 對象存儲特定的用戶會話所需的信息。當用戶在應用程序的頁之間跳轉時,存儲在Session 對像中的變量不會清除,而用戶在應用程序中訪問頁面時,這些變量始終存在。當用戶請求來自應用程序的Web 頁時,如果該用戶還沒有會話,則Web 服務器將自動創建一個Session 對象。當會話過期或被放棄後,服務器將終止該會話。
通過向客戶程序發送唯一的Cookie 可以管理服務器上的Session 對象。當用戶第一次請求ASP 應用程序中的某個頁面時,ASP 要檢查HTTP 頭信息,查看是否有在報文中有名為ASPSESSIONID 的Cookie 發送過來,如果有,則服務器會啟動新的會話,並為該會話生成一個全局唯一的值,在把這個值作為新ASPSESSIONID Cookie 的值發送給客戶端,正是使用這種Cookie,可以訪問存儲在服務器上的屬於客戶程序的信息。 Session 對象最常見的作用就是存儲用戶的首選項。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲在Session 對像中。另外其還經常被用在鑑別客戶身份的程序中。要注意的是,會話狀態僅在支持cookie 的瀏覽器中保留,如果客戶關閉了Cookie 選項,Session 也就不能發揮作用了。
一、屬性
1、SessionID
Ses
sionID 屬性返回用戶的會話標識。在創建會話時,服務器會為每一個會話生成一個單獨的標識。會話標識以長整形數據類型返回。在很多情況下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 分鐘。可以通過在Internet 服務管理器中設置應用程序選項屬性頁中的會話超時屬性改變應用程序的默認超時限制設置。應依據您的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)。