ASP實用大全-ASP對象(5)
發(fā)表時間:2024-06-12 來源:明輝站整理相關軟件相關文章人氣:
[摘要]深入研究Application和Session對象(1) 用ASP編寫虛擬社區(qū)、網(wǎng)上購物等程序時,Application和Session對象具有舉足輕重的作用,能夠靈活合理地運用這兩個對象是提高程序質(zhì)量的關鍵。下面讓筆者根據(jù)自己在這方面的經(jīng)驗,向大家深入介紹一下ASP的這兩個內(nèi)建對象! ...
深入研究Application和Session對象(1)
用ASP編寫虛擬社區(qū)、網(wǎng)上購物等程序時,Application和Session對象具有舉足輕重的作用,能夠靈活合理地運用這兩個對象是提高程序質(zhì)量的關鍵。下面讓筆者根據(jù)自己在這方面的經(jīng)驗,向大家深入介紹一下ASP的這兩個內(nèi)建對象。
一、Application對象的成員概述
Application對象成員包括Application對象的集合、方法和事件。
⒈Application對象的集合
Contents集合:沒有使用<OBJECT>元素定義的存儲于Applicaiton對象中的所有變量的集合
StaticObjects:使用<OBJECT>元素定義的存儲于Application對象中的所有變量 的集合
例:在default.asp中有如下賦值
application("a")="a"
application("b")=128
application("c")=false
則有contents集合
application.contents(1)="a" '也可寫為application.contents("a")="a"
application.contents(2)=128 '也可寫為application.contents("b")=128
application.contents(3)=false '也可寫為application.contents("c")=false
在此筆者推薦你在調(diào)用時使用類如application.contents("a")的方法,因為這樣更為直觀,如果用序號來表示的話則要考慮賦值的先后順序。
、睞pplication對象的方法
Contents.Remove("變量名"):從Application.Contents集合中刪除指定的變量
Contents.RemoveAll() :把Application.Contents集合中的所有變量刪除
Lock() :鎖定Application對象,使得只有當前的ASP頁對內(nèi)容能進行訪問
Unlock() :解除對Application對象的鎖定
例:在default.asp中:
application("a")="a"
application("b")=128
application("c")=false
response.write application.contents(1)&"<br>"
response.write application.contents(2)&"<br>"
response.write application.contents(3)&"<br>"
response.write "After Remove b:"
application.contents.remove("b")
response.write application.contents(1)&"<br>"
response.write application.contents(2)&"<br>"
執(zhí)行結果:
a
128
False
After Remove b:
a
False
如果要刪除集合中所有變量用application.contents.removeall即可,至于Lock和Unlock方法在實際中經(jīng)常用到,讀者也比較熟悉,在此就不在累贅。
、矨pplication對象事件
OnStart:第一個訪問服務器的用戶第一次訪問某一頁面時發(fā)生
OnEnd :當最后一個用戶的會話已經(jīng)結束并且該會話的OnEnd事件所有代碼已經(jīng)執(zhí)行完畢后發(fā)生,或最后一個用戶訪問服務器一段時間(一般為20分鐘)后仍然沒有人訪問該服務器產(chǎn)生。
想要定義application對象的OnStart和OnEnd事件里做什么需要將代碼寫在Global.asa這個文件里(下文有舉例),并且將該文件放在站點的根目錄下(一般是Inetpub\wwwroot\)
二、Session對象的成員概述
Session對象的成員比Application對象多一項屬性,即:集合、屬性、方法、事件
、盨ession對象的集合
Contents :沒有使用<OBJECT>元素定義的存儲于特定Session對象的所有變量的集合。
StaticObject:使用<OBJECT>元素定義的、存儲于Session對象中的所有變量的集合。
例:在default.asp中有如下賦值
session("a")="a"
session("b")=128
session("c")=false
則有contents集合
session.contents(1)="a" '也可寫為session.contents("a")="a"
session.contents(2)=128 '也可寫為session.contents("b")=128
session.contents(3)=false '也可寫為session.contents("c")=false
⒉Session對象的屬性
CodePage: 可讀/可寫。整型。定義用于在瀏覽器中顯示頁內(nèi)容的代碼頁。代碼頁是字符集的數(shù)字值,不同的語言使用不同的代碼頁。例如,ANSI代碼頁為1252,日文代碼頁為932,簡體中文代碼頁為936。
LCID : 可讀/可寫。整型。定義發(fā)送給瀏覽器的頁面地區(qū)標識。LCID是唯一地標識地區(qū)的一個國際標準縮寫,例如,2057定義當前地區(qū)的貨幣符號是"£"。
SessionID: 只讀。長整型。返回本會話的會話標識符。每創(chuàng)建一個會話,由服務器自動分配一個標識符?梢愿鶕(jù)它的值判斷兩個用戶是誰先訪問服務器。
Timeout : 可讀/可寫。整型。為會話定義以分鐘為單位的超時限定。如果用戶在這個時間內(nèi)沒有刷新或請求任何一個網(wǎng)頁,則該用戶產(chǎn)生的會話自動結束。缺省值是20。
以上屬性在實際應用中作用不大,而且基本上不需要怎么修改,這幾個屬性也沒什么特殊的地方。
、砈ession對象的方法
Contents.Remove("變量名"): 從Session.contents集合中刪除指定的變量
Contents.Removeall() : 刪除Session.contents集合中的所有變量
Abandon() : 結束當前用戶會話并且撤消當前Session對象。
Session對象的Contents.Remove("變量名")和Contents.Removeall()方法與Application對象的基本上沒什么區(qū)別,為幫助理解,大家可以參照上面的例子將Application改為Session。這里要說明一下的是Contents.Removeall()和Abandon()的區(qū)別,執(zhí)行這兩個方法都會釋放當前
用戶會話的所有Session變量,不同的是Contents.Removeall()單純地釋放Session變量的值而不終止當前的會話,而Abandon()除了釋放Session變量外還會終止會話引發(fā)Session_OnEnd事件,希望大家注意兩者的區(qū)別。
、碨ession對象的事件
OnStart: 當ASP用戶會話產(chǎn)生時觸發(fā),一旦有任一用戶對本服務器請求任一頁面即產(chǎn)生該事件。
OnEnd : 當ASP用戶會話結束時觸發(fā),當使用Abandon()方法或超時也會觸發(fā)該事件。
這兩個事件和Application的OnStart、OnEnd事件一樣,也是必須放在Global.asa文件里,下
面就重點和大家研究一下這四個事件的使用。
三、Global.asa
ASP的Application和Session對象體現(xiàn)了其他ASP內(nèi)置對象所沒有的特征--事件。每一個訪客訪問服務器時都會觸發(fā)一個OnStart事件(第一個訪客會同時觸發(fā)Application和Session的OnStart事件,但Application先于Session),每個訪客的會話結束時都會觸發(fā)一個OnEnd事件(最后一個訪客會話結束時會同時觸發(fā)Application和Session的OnEnd事件,但Session先于Application)。
OnStart和OnEnd這兩個事件一般應用在虛擬社區(qū)中統(tǒng)計在線人數(shù)、修改用戶的在線離線狀態(tài)等。要具體定義這兩個事件,需要將代碼寫在Global.asa文件,并將該文件放在站點的根目錄下(缺省是\Inetpub\wwwroot\)。另外,Application和Session對象規(guī)定了在OnEnd事件里除了Application對象外其他ASP內(nèi)置對象(Response、Request、Server、Session...)一概不能使用。以下舉一個虛擬社區(qū)統(tǒng)計在線人數(shù)的例子來說明如何使用這兩個事件。
文件說明:
global.asa 位于d:\Inetpub\wwwroot\目錄下
default.asp 位于d:\Inetpub\wwwroot\目錄下,虛擬社區(qū)登錄頁面
login.asp 位于d:\Inetpub\wwwroot\目錄下,用于檢測用戶輸入的用戶名及密碼
index.asp 位于d:\Inetpub\wwwroot\目錄下,虛擬社區(qū)首頁
bbs.mdb 位于d:\Inetpub\wwwroot\目錄下,存儲用戶信息的數(shù)據(jù)庫
數(shù)據(jù)庫(ACCESS)結構:
===bbs表===
id 用戶ID,長整型
name 用戶名,文本型
code 密碼,文本型
online 在線狀態(tài),是/否
===global.asa===
。約cript LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
application("online")=0
End Sub
sub Application_OnEnd
nd Sub
Sub Session_OnStart
End Sub
Sub Session_OnEnd
if session.contents("pass") then '判斷是否為登錄用戶的Session_OnEnd
application.lock
application("online")=application("online")-1
application.unlock
end if
End Sub
</script>
==============
===login.asp===
......'密碼驗證,連接數(shù)據(jù)庫,檢測用戶輸入的用戶名及密碼是否正確
if 密碼驗證通過 then
session("name")=rs("name")
session("id")=rs("id")
session("pass")=true
else
rs.close
conn.close
response.write "密碼錯誤!"
response.end
end if
application.lock
application("online")=application("online")+1
conn.Execute ("update bbs set online=1 where id="&session("id"))'將用戶的狀態(tài)設為在線
application.unlock
rs.close
conn.close
response.redirect "index.asp" '初始化數(shù)據(jù)后跳轉到社區(qū)首頁