明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP內(nèi)建對象Application 與 Session

[摘要]生 在上一篇中作者給大家詳細介紹了 ASP 內(nèi)建對象 Response 的使用方法,在這一篇中作者將繼續(xù)給大家介紹另兩個非常實用且重要的 ASP 的內(nèi)建對象 Application 和 Session。 在 ASP 的內(nèi)建對象中除了用于發(fā)送、接收和處理數(shù)據(jù)的對象外,還有一些非常實用的代表 Ac...



在上一篇中作者給大家詳細介紹了 ASP 內(nèi)建對象 Response 的使用方法,在這一篇中作者將繼續(xù)給大家介紹另兩個非常實用且重要的 ASP 的內(nèi)建對象 Application 和 Session。 在 ASP 的內(nèi)建對象中除了用于發(fā)送、接收和處理數(shù)據(jù)的對象外,還有一些非常實用的代表 Active Server 應(yīng)用程序和單個用戶信息的對象。 讓我們先來看看 Application 對象。在同一虛擬目錄及其子目錄下的所有 .asp 文件構(gòu)成了 ASP 應(yīng)用程序。我們非但可以使用 Application 對象,在給定的應(yīng)用程序的所有用戶之間共享信息,并在服務(wù)器運行期間持久的保存數(shù)據(jù)。而且,Application 對象還有控制訪問應(yīng)用層數(shù)據(jù)的方法和可用于在應(yīng)用程序啟動和停止時觸發(fā)過程的事件。

下面就讓我們一起來學習 Application 對象。

一、屬性 雖然 A pplication 對 象沒有內(nèi)置的屬性,但我們可以使用以下句法設(shè)置用戶定義的屬性也可稱為集合。

A pplication(" 屬性 / 集合名稱 ")= 值

我們可以使用如下腳本聲明并建立 Application 對象的屬性。 < % Application("MyVar") = "Hello" Set Application("MyObj") = Server.CreateObject("MyComponent") %> 一旦我們分配了 A pplication 對 象的屬性,它就會持久地存在,直到關(guān)閉 W EB 服 務(wù)器服務(wù)使得 A pplication 停 止。由于存儲在 A pplication 對 象中的數(shù)值可以被應(yīng)用程序的所有用戶讀取,所以 A pplication 對 象的屬性特別適合在應(yīng)用程序的用戶之間傳遞信息。

二、方法 Application 對象有兩個方法,它們都是用于處理多個用戶對存儲在 Application 中的數(shù)據(jù)進行寫入的問題

1 、 L ock 方 法禁止其他客戶修改 A pplication 對 象的屬性。

Lock 方法阻止其他客戶修改存儲在 Application 對象中的變量,以確保在同一時刻僅有一個客戶可修改和存取 Application 變量。如果用戶沒有明確調(diào)用 Unlock 方法,則服務(wù)器將在 .asp 文件結(jié)束或超時后即解除對 Application 對象的鎖定。

讓我們來看看下面這段用 A pplication 來 記錄頁面訪問次數(shù)的程序 : < % Dim NumVisitsNumVisits=0 Application.LockApplication("NumVisits") = Application("NumVisits") + 1 Application.Unlock %> 歡迎光臨本網(wǎng)頁,你是本頁的第 < %= Application("NumVisits") %> 位訪客 ! 將以上腳本保存在你的 .asp 文件中,就輕而易舉地給你的頁面添加了一個計數(shù)器。

2、和 Lock 方法相反,Unlock 方法允許其他客戶修改 Application 對象的屬性。

在上面的例子中,上述例子中,Unlock 方法解除對象的鎖定,使得下一個客戶端能夠增加 NumVisits 的值。

三、事件

1、Application_OnStart

A pplication_OnStart 事 件在首次創(chuàng)建新的會話 ( 即 S ession_OnStart 事 件 ) 之 前發(fā)生。當 W EB 服 務(wù)器啟動并允許對應(yīng)用程序所包含的文件進行請求時就觸發(fā) A pplication_OnStart 事 件。 A pplication_OnStart 事 件的處理過程必須寫在 G lobal.asa 文 件之中。 Application_OnStart 事件的語法如下 : < SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server> Sub Application_OnStart. . . End Sub < /SCRIPT> 2、Application_OnEnd Application_OnEnd 事件在應(yīng)用程序退出時于 Session_OnEnd 事件之后發(fā)生,Application_OnEnd 事件的處理過程也必須寫在 Global.asa 文件之中。

下面讓我們來看看在使用 Application 對象時必須注意的一些事項。

不能在 A pplication 對 象中存儲 A SP 內(nèi) 建對象。例如,下面的每一行都返回一個錯誤。 < % Set Application("var1")=Session Set Application("var2")=Request Set Application("var3")=Response Set Application("var4")=Server Set Application("var5")=Application Set Application("var6")=ObjectContext %> 若您將一個數(shù)組存儲在 Application 對象中,請不要直接更改存儲在數(shù)組中的元素。例如,下列的腳本無法運行。 < % Application("StoredArray")(3) = "new value" %> 這是因為 A pplication 對 象是作為集合被實現(xiàn)的。數(shù)組元素 S toredArray(3) 未 獲得新的賦值。而此值將包含在 A pplication 對 象集合中,并將覆蓋此位置以前存儲的任何信息。建議您在將數(shù)組存儲在 A pplication 對 象中時,在檢索或改變數(shù)組中的對象前獲取數(shù)組的一個副本。在對數(shù)組操作時,您應(yīng)再將數(shù)組全部存儲在 A pplication 對 象中,這樣您所做的任何改動將被存儲下來。下列的腳本對此進行演示。 ---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 內(nèi)建對象就是 Session。我們可以使用 Session 對象存儲特定的用戶會話所需的信息。當用戶在應(yīng)用程序的頁之間跳轉(zhuǎn)時,存儲在 Session 對象中的變量不會清除,而用戶在應(yīng)用程序中訪問頁面時,這些變量始終存在。當用戶請求來自應(yīng)用程序的 Web 頁時,如果該用戶還沒有會話,則 Web 服務(wù)器將自動創(chuàng)建一個 Session 對象。當會話過期或被放棄后,服務(wù)器將終止該會話。 通過向客戶程序發(fā)送唯一的 Cookie 可以管理服務(wù)器上的 Session 對象。當用戶第一次請求 ASP 應(yīng)用程序中的某個頁面時,ASP 要檢查 HTTP 頭信息,查看是否有在報文中有名為 ASPSESSIONID 的 Cookie 發(fā)送過來,如果有,則服務(wù)器會啟動新的會話,并為該會話生成一個全局唯一的值,在把這個值作為新 ASPSESSIONID Cookie 的值發(fā)送給客戶端,正是使用這種 Cookie,可以訪問存儲在服務(wù)器上的屬于客戶程序的信息。Session 對象最常見的作用就是存儲用戶的首選項。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲在 Session 對象中。另外其還經(jīng)常被用在鑒別客戶身份的程序中。要注意的是,會話狀態(tài)僅在支持 cookie 的瀏覽器中保留,如果客戶關(guān)閉了 Cookie 選項,Session 也就不能發(fā)揮作用了。

一、屬性

1、SessionID

SessionID 屬性返回用戶的會話標識。在創(chuàng)建會話時,服務(wù)器會為每一個會話生成一個單獨的標識。會話標識以長整形數(shù)據(jù)類型返回。在很多情況下 SessionID 可以用于 WEB 頁面注冊統(tǒng)計。

2、TimeOut Timeout 屬性以分鐘為單位為該應(yīng)用程序的 Session 對象指定超時時限。如果用戶在該超時時限之內(nèi)不刷新或請求網(wǎng)頁,則該會話將終止。

二、方法 Session 對象僅有一個方法,就是 Abandon,Abandon 方法刪除所有存儲在 Session 對象中的對象并釋放這些對象的源。如果您未明確地調(diào)用 Abandon 方法,一旦會話超時,服務(wù)器將刪除這些對象。當服務(wù)器處理完當前頁時,下面示例將釋放會話狀態(tài)。 < % Session.Abandon %> 三、事件 Session 對象有兩個事件可用于在 Session 對象啟動和釋放是運行過程。

1、Session_OnStart 事件在服務(wù)器創(chuàng)建新會話時發(fā)生。服務(wù)器在執(zhí)行請求的頁之前先處理該腳本。Session_OnStart 事件是設(shè)置會話期變量的最佳時機,因為在訪問任何頁之前都會先設(shè)置它們。

盡管在 Session_OnStart 事件包含 Redirect 或 End 方法調(diào)用的情況下 Session 對象仍會保持,然而服務(wù)器將停止處理 Global.asa 文件并觸發(fā) Session_OnStart 事件的文件中的腳本。

為了確保用戶在打開某個特定的 W eb 頁 時始終啟動一個會話,就可以在 S ession_OnStart 事 件中調(diào)用 R edirect 方 法。當用戶進入應(yīng)用程序時,服務(wù)器將為用戶創(chuàng)建一個會話并處理 S ession_OnStart 事 件腳本。您可以將腳本包含在該事件中以便檢查用戶打開的頁是不是啟動頁,如果不是,就指示用戶調(diào)用 R esponse.Redirect 方 法啟動網(wǎng)頁。程序如下 : < 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 頁時,服務(wù)器都會創(chuàng)建一個新會話。這樣,對于每個請求服務(wù)器都將處理 Session_OnStart 腳本并將用戶重定向到啟動頁中。

2、Session_OnEnd 事件在會話被放棄或超時發(fā)生。

關(guān)于使用 Session 對象需要注意的事項 Application 對象相近,請參照前文。

會話可以通過以下三種方式啟動 :

1、一個新用戶請求訪問一個 URL,該 URL 標識了某個應(yīng)用程序中的 .asp 文件,并且該應(yīng)用程序的 Global.asa 文件包含 Session_OnStart 過程。

2、用戶在 Session 對象中存儲了一個值。

3、用戶請求了一個應(yīng)用程序的 .asp 文件,并且該應(yīng)用程序的Global.asa 文件使用 < OBJECT> 標簽創(chuàng)建帶有會話作用域的對象的實例。 如果用戶在指定時間內(nèi)沒有請求或刷新應(yīng)用程序中的任何頁,會話將自動結(jié)束。這段時間的默認值是 2 0 分 鐘?梢酝ㄟ^在 I nternet 服 務(wù)管理器中設(shè)置“應(yīng)用程序選項”屬性頁中的“會話超時”屬性改變應(yīng)用程序的默認超時限制設(shè)置。應(yīng)依據(jù)您的 W eb 應(yīng) 用程序的要求和服務(wù)器的內(nèi)存空間來設(shè)置此值。例如,如果您希望瀏覽您的 W eb 應(yīng) 用程序的用戶在每一頁僅停留幾分鐘,就應(yīng)該縮短會話的默認超時值。過長的會話超時值將導致打開的會話過多而耗盡您的服務(wù)器的內(nèi)存資源。對于一個特定的會話,如果您想設(shè)置一個小于默認超時值的超時值,可以設(shè)置 S ession 對 象的 T imeout 屬 性。例如,下面這段腳本將超時值設(shè)置為 5 分 鐘。 < % Session.Timeout = 5 %> 當然你也可以設(shè)置一個大于默認設(shè)置的超時值,Session.Timeout 屬性決定超時值。你還可以通過 Session 對象的 Abandon 方法顯式結(jié)束一個會話。例如,在表格中提供一個“退出”按鈕,將按鈕的 ACTION 參數(shù)設(shè)置為包含下列命令的 .asp 文件的 URL。 < % Session.Abandon %> 今天,我們學習了兩個在 WEB 頁面特別是基于 WEB 的 BBS 或 Chat 上經(jīng)常使用 ASP 內(nèi)建對象,由于這兩個對象在實際運用中很實用,因此在下一篇中作者將運用至此我們所學過的 4 個 ASP 內(nèi)建對象,給大家演示一個完整的 ASP 應(yīng)用程序,相信通過這個練習,能大大加深你對 ASP 應(yīng)用程序的理解和掌握。敬請關(guān)注“動態(tài)網(wǎng)站設(shè)計十八般武藝 --ASP 篇 (9)”。
(出處:熱點網(wǎng)絡(luò))