?? asp教程:asp內(nèi)建對象application 和 session.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0052)http://chinese.pku.edu.cn/netstudy/aspteach/asp8.htm -->
<HTML><HEAD><TITLE>ASP教程:ASP內(nèi)建對象Application 和 Session</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb_2312-80">
<META content="MSHTML 6.00.2600.0" name=GENERATOR>
<META content="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot"
name=Template><LINK href="../../cpcw.css" rel=stylesheet></HEAD>
<BODY vLink=#800080 link=#0000ff background="">
<TABLE width="85%" align=center border=0>
<TBODY>
<TR bgColor=#ffffff>
<TD>
<P align=center><FONT class=title
color=#ff3333><B>ASP教程:ASP內(nèi)建對象Application 和 Session</B></FONT></P>
<P align=right><B>作者:<FONT color=#ff3333><A
href="mailto:shusheng@pchome.net">書生</A></FONT></B></P>
<P align=justify></P>
<HR>
在上一篇中作者給大家詳細(xì)介紹了 ASP 內(nèi)建對象 Response 的使用方法,在這一篇中作者將繼續(xù)給大家介紹另兩個非常實用且重要的 ASP
的內(nèi)建對象 Application 和 Session。<BR><BR> 在 ASP
的內(nèi)建對象中除了用于發(fā)送、接收和處理數(shù)據(jù)的對象外,還有一些非常實用的代表 Active Server
應(yīng)用程序和單個用戶信息的對象。<BR><BR> 讓我們先來看看 Application 對象。在同一虛擬目錄及其子目錄下的所有 .asp
文件構(gòu)成了 ASP 應(yīng)用程序。我們非但可以使用 Application
對象,在給定的應(yīng)用程序的所有用戶之間共享信息,并在服務(wù)器運行期間持久的保存數(shù)據(jù)。而且,Application
對象還有控制訪問應(yīng)用層數(shù)據(jù)的方法和可用于在應(yīng)用程序啟動和停止時觸發(fā)過程的事件。
<P> 下面就讓我們一起來學(xué)習(xí) Application 對象。 </P>
<P> 一、屬性 </P>
<P> 雖然 Application 對象沒有內(nèi)置的屬性,但我們可以使用以下句法設(shè)置用戶定義的屬性也可稱為集合。 </P>
<P> Application(" 屬性 / 集合名稱 ")= 值 </P>
<P> 我們可以使用如下腳本聲明并建立 Application 對象的屬性。 <BR><
%<BR>Application("MyVar") = "Hello"<BR>Set Application("MyObj") =
Server.CreateObject("MyComponent")<BR>%><BR><BR></P> 一旦我們分配了
Application 對象的屬性,它就會持久地存在,直到關(guān)閉 WEB 服務(wù)器服務(wù)使得 Application 停止。由于存儲在
Application 對象中的數(shù)值可以被應(yīng)用程序的所有用戶讀取,所以 Application 對象的屬性特別適合在應(yīng)用程序的用戶之間傳遞信息。
<P> 二、方法 </P>
<P> Application 對象有兩個方法,它們都是用于處理多個用戶對存儲在 Application 中的數(shù)據(jù)進(jìn)行寫入的問題 </P>
<P> 1、Lock 方法禁止其他客戶修改 Application 對象的屬性。 </P>
<P> Lock 方法阻止其他客戶修改存儲在 Application 對象中的變量,以確保在同一時刻僅有一個客戶可修改和存取
Application 變量。如果用戶沒有明確調(diào)用 Unlock 方法,則服務(wù)器將在 .asp 文件結(jié)束或超時后即解除對 Application
對象的鎖定。 </P> 讓我們來看看下面這段用 Application 來記錄頁面訪問次數(shù)的程序 : <BR>< %<BR>Dim
NumVisitsNumVisits=0<BR>Application.LockApplication("NumVisits") =
Application("NumVisits") +
1<BR>Application.Unlock<BR>%><BR>歡迎光臨本網(wǎng)頁,你是本頁的第 < %=
Application("NumVisits") %> 位訪客 !<BR><BR>
<P> 將以上腳本保存在你的 .asp 文件中,就輕而易舉地給你的頁面添加了一個計數(shù)器。 </P>
<P> 2、和 Lock 方法相反,Unlock 方法允許其他客戶修改 Application 對象的屬性。 </P>
<P> 在上面的例子中,上述例子中,Unlock 方法解除對象的鎖定,使得下一個客戶端能夠增加 NumVisits 的值。 </P>
<P> 三、事件 </P>
<P> 1、Application_OnStart </P> Application_OnStart 事件在首次創(chuàng)建新的會話 ( 即
Session_OnStart 事件 ) 之前發(fā)生。當(dāng) WEB 服務(wù)器啟動并允許對應(yīng)用程序所包含的文件進(jìn)行請求時就觸發(fā)
Application_OnStart 事件。Application_OnStart 事件的處理過程必須寫在 Global.asa
文件之中。<BR><BR> Application_OnStart 事件的語法如下 : <BR>< SCRIPT
LANGUAGE=ScriptLanguage RUNAT=Server><BR>Sub Application_OnStart. .
.<BR>End Sub<BR>< /SCRIPT><BR><BR>
<P> 2、Application_OnEnd </P>
<P> Application_OnEnd 事件在應(yīng)用程序退出時于 Session_OnEnd 事件之后發(fā)生,Application_OnEnd
事件的處理過程也必須寫在 Global.asa 文件之中。 </P>
<P> 下面讓我們來看看在使用 Application 對象時必須注意的一些事項。 </P> 不能在 Application 對象中存儲
ASP 內(nèi)建對象。例如,下面的每一行都返回一個錯誤。 <BR>< %<BR>Set
Application("var1")=Session<BR>Set Application("var2")=Request<BR>Set
Application("var3")=Response<BR>Set Application("var4")=Server<BR>Set
Application("var5")=Application<BR>Set
Application("var6")=ObjectContext<BR>%><BR><BR>
<P> 若您將一個數(shù)組存儲在 Application 對象中,請不要直接更改存儲在數(shù)組中的元素。例如,下列的腳本無法運行。 <BR>< %
Application("StoredArray")(3) = "new value" %><BR><BR></P> 這是因為
Application 對象是作為集合被實現(xiàn)的。數(shù)組元素 StoredArray(3) 未獲得新的賦值。而此值將包含在 Application
對象集合中,并將覆蓋此位置以前存儲的任何信息。建議您在將數(shù)組存儲在 Application
對象中時,在檢索或改變數(shù)組中的對象前獲取數(shù)組的一個副本。在對數(shù)組操作時,您應(yīng)再將數(shù)組全部存儲在 Application
對象中,這樣您所做的任何改動將被存儲下來。下列的腳本對此進(jìn)行演示。 <BR>---asp8a.asp---<BR>< %<BR>dim
MyArray()<BR>Redim MyArray(5)<BR>MyArray(0)="hello"<BR>MyArray(1)="some
other
string"<BR>Application.Lock<BR>Application("StoredArray")=MyArray<BR>Application.Unlock<BR>Response.Redirect
"asp8b.asp"<BR>%><BR><BR>---asp8b.asp---<BR><
%<BR>LocalArray=Application("StoredArray")<BR>LocalArray(1)="
there"<BR>Response.Write
LocalArray(0)&LocalArray(1)<BR>Application.Lock<BR>Application("StoredArray")=LocalArray<BR>Application.Unlock<BR>%><BR><BR>
與 Application 對象具有相近作用的另一個非常實用的 ASP 內(nèi)建對象就是 Session。我們可以使用 Session
對象存儲特定的用戶會話所需的信息。當(dāng)用戶在應(yīng)用程序的頁之間跳轉(zhuǎn)時,存儲在 Session
對象中的變量不會清除,而用戶在應(yīng)用程序中訪問頁面時,這些變量始終存在。當(dāng)用戶請求來自應(yīng)用程序的 Web 頁時,如果該用戶還沒有會話,則 Web
服務(wù)器將自動創(chuàng)建一個 Session 對象。當(dāng)會話過期或被放棄后,服務(wù)器將終止該會話。<BR><BR> 通過向客戶程序發(fā)送唯一的 Cookie
可以管理服務(wù)器上的 Session 對象。當(dāng)用戶第一次請求 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ā)揮作用了。
<P> 一、屬性 </P>
<P> 1、SessionID </P>
<P> SessionID
屬性返回用戶的會話標(biāo)識。在創(chuàng)建會話時,服務(wù)器會為每一個會話生成一個單獨的標(biāo)識。會話標(biāo)識以長整形數(shù)據(jù)類型返回。在很多情況下 SessionID
可以用于 WEB 頁面注冊統(tǒng)計。 </P>
<P> 2、TimeOut </P>
<P> Timeout 屬性以分鐘為單位為該應(yīng)用程序的 Session
對象指定超時時限。如果用戶在該超時時限之內(nèi)不刷新或請求網(wǎng)頁,則該會話將終止。 </P>
<P> 二、方法 </P>
<P> Session 對象僅有一個方法,就是 Abandon,Abandon 方法刪除所有存儲在 Session
對象中的對象并釋放這些對象的源。如果您未明確地調(diào)用 Abandon
方法,一旦會話超時,服務(wù)器將刪除這些對象。當(dāng)服務(wù)器處理完當(dāng)前頁時,下面示例將釋放會話狀態(tài)。 <BR> < % Session.Abandon
%><BR><BR></P>
<P> 三、事件 </P>
<P> Session 對象有兩個事件可用于在 Session 對象啟動和釋放是運行過程。 </P>
<P> 1、Session_OnStart 事件在服務(wù)器創(chuàng)建新會話時發(fā)生。服務(wù)器在執(zhí)行請求的頁之前先處理該腳本。Session_OnStart
事件是設(shè)置會話期變量的最佳時機(jī),因為在訪問任何頁之前都會先設(shè)置它們。 </P>
<P> 盡管在 Session_OnStart 事件包含 Redirect 或 End 方法調(diào)用的情況下 Session
對象仍會保持,然而服務(wù)器將停止處理 Global.asa 文件并觸發(fā) Session_OnStart 事件的文件中的腳本。 </P>
為了確保用戶在打開某個特定的 Web 頁時始終啟動一個會話,就可以在 Session_OnStart 事件中調(diào)用 Redirect
方法。當(dāng)用戶進(jìn)入應(yīng)用程序時,服務(wù)器將為用戶創(chuàng)建一個會話并處理 Session_OnStart
事件腳本。您可以將腳本包含在該事件中以便檢查用戶打開的頁是不是啟動頁,如果不是,就指示用戶調(diào)用 Response.Redirect
方法啟動網(wǎng)頁。程序如下 : <BR><BR>< SCRIPT RUNAT=Server
Language=VBScript><BR>Sub Session_OnStart<BR>startPage =
"/MyApp/StartHere.asp"<BR>currentPage =
Request.ServerVariables("SCRIPT_NAME")<BR>if
strcomp(currentPage,startPage,1)
then<BR>Response.Redirect(startPage)<BR>end if<BR>End Sub<BR><
/SCRIPT><BR><BR> 上述程序只能在支持 cookie 的瀏覽器中運行。因為不支持 cookie 的瀏覽器不能返回
SessionID cookie,所以,每當(dāng)用戶請求 Web 頁時,服務(wù)器都會創(chuàng)建一個新會話。這樣,對于每個請求服務(wù)器都將處理
Session_OnStart 腳本并將用戶重定向到啟動頁中。
<P> 2、Session_OnEnd 事件在會話被放棄或超時發(fā)生。 </P>
<P> 關(guān)于使用 Session 對象需要注意的事項 Application 對象相近,請參照前文。 </P>
<P> 會話可以通過以下三種方式啟動 : </P>
<P> 1、一個新用戶請求訪問一個 URL,該 URL 標(biāo)識了某個應(yīng)用程序中的 .asp 文件,并且該應(yīng)用程序的 Global.asa 文件包含
Session_OnStart 過程。 </P>
<P> 2、用戶在 Session 對象中存儲了一個值。 </P>
<P> 3、用戶請求了一個應(yīng)用程序的 .asp 文件,并且該應(yīng)用程序的Global.asa 文件使用 < OBJECT>
標(biāo)簽創(chuàng)建帶有會話作用域的對象的實例。 </P> 如果用戶在指定時間內(nèi)沒有請求或刷新應(yīng)用程序中的任何頁,會話將自動結(jié)束。這段時間的默認(rèn)值是 20
分鐘。可以通過在 Internet 服務(wù)管理器中設(shè)置“應(yīng)用程序選項”屬性頁中的“會話超時”屬性改變應(yīng)用程序的默認(rèn)超時限制設(shè)置。應(yīng)依據(jù)您的 Web
應(yīng)用程序的要求和服務(wù)器的內(nèi)存空間來設(shè)置此值。例如,如果您希望瀏覽您的 Web
應(yīng)用程序的用戶在每一頁僅停留幾分鐘,就應(yīng)該縮短會話的默認(rèn)超時值。過長的會話超時值將導(dǎo)致打開的會話過多而耗盡您的服務(wù)器的內(nèi)存資源。對于一個特定的會話,如果您想設(shè)置一個小于默認(rèn)超時值的超時值,可以設(shè)置
Session 對象的 Timeout 屬性。例如,下面這段腳本將超時值設(shè)置為 5 分鐘。 <BR> < % Session.Timeout
= 5 %><BR><BR> 當(dāng)然你也可以設(shè)置一個大于默認(rèn)設(shè)置的超時值,Session.Timeout 屬性決定超時值。你還可以通過
Session 對象的 Abandon 方法顯式結(jié)束一個會話。例如,在表格中提供一個“退出”按鈕,將按鈕的 ACTION 參數(shù)設(shè)置為包含下列命令的
.asp 文件的 URL。 <BR> < % Session.Abandon %><BR><BR> 今天,我們學(xué)習(xí)了兩個在 WEB
頁面特別是基于 WEB 的 BBS 或 Chat 上經(jīng)常使用 ASP
內(nèi)建對象,由于這兩個對象在實際運用中很實用,因此在下一篇中作者將運用至此我們所學(xué)過的 4 個 ASP 內(nèi)建對象,給大家演示一個完整的 ASP
應(yīng)用程序,相信通過這個練習(xí),能大大加深你對 ASP 應(yīng)用程序的理解和掌握。敬請關(guān)注“動態(tài)網(wǎng)站設(shè)計十八般武藝 --ASP 篇 (9)”。
<P align=center><A
href="http://chinese.pku.edu.cn/netstudy/aspteach/asp7.htm">上一節(jié)</A> <A
href="http://chinese.pku.edu.cn/netstudy/aspteach/asp9.htm">下一節(jié)</A></P>
<P align=center><A
href="http://chinese.pku.edu.cn/netstudy/aspteach/index.asp">在線教程首頁</A></P></TD></TR></TBODY></TABLE></BODY></HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -