程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP入門教程 >> ASP講座之三:Application對象與Session對象

ASP講座之三:Application對象與Session對象

編輯:ASP入門教程
上一講中,我們學習了Request對象的Form數據集合、QueryString數據集合和ServerVariables數據集合。在繼續下面的學習之前,建議你先輕松一下,因為接下來要介紹的application對象相對比較抽象,剛開始理解起來恐怕會不辨東西。切記:當你找不到北時,便不要過多考慮Application對象到底是什麼東西?還是一句老話,先學會使用它。

一、了解Application對象。為了提神,我們先看一個計數器的例程(你應該運行它以便於理解):
先編輯一個wuf16.htm文件:
<Html>
<body>
記錄某個頁面的點擊數示例:<a href="wuf17.ASP">wuf17.ASP</a> 
</body>
</Html>
wuf17.ASP的代碼如下:
<% @ LANGUAGE = VBScript %>
<% 'wuf17.ASP - 記錄某一頁面的訪問數(計數器原理)
Option Explicit
Dim CountWeb
CountWeb = Request.ServerVariables("SCRIPT_NAME")
'這樣保證每個頁面都有一個唯一的變量, 避免混亂
%>
<Html><BODY>
<%
Response.Write CountWeb & "<Br><Br>" & vbcrlf
Application.Lock   '請看講解
Application(CountWeb) = Application(CountWeb) + 1   '累加器,點擊數加1
Application.UnLock
Response.Write "WEB服務器關閉重啟前該頁的點擊總數為: " & Application(CountWeb) 
%>
</BODY></Html>
運行這個程序時,對大部分的人來說,只有一台機器,既是Web服務器,又是客戶端。那麼你只能想象這樣一種境況了:你的這兩個主頁文件放在很遠的Web服務器上,而如潮水般的國內外用戶正通過浏覽器訪問它們。每個用戶點擊一次,Application(CountWeb) 的值就加1,而且只要存放文件wuf17.ASP的服務器沒有關閉,Application(CountWeb)就將一直累加下去。但是注意,如果服務器關閉後重啟,則Application(CountWeb)將重新從0開始計數(我暈,我說我的頁面訪問數怎麼老是一位數)。為了避免這種永遠從零開始的計數情況,你必須要在服務器關閉之前將Application(CountWeb)的值保存起來,下次需要時再取出來,就能夠順序累計下去了,具體如何做,且聽N回後分解。
接下來的問題,就是Application.Lock、UnLock是什麼意思?剛才我們做了一個假設,大量的用戶正在訪問該頁面,而每一個用戶的點擊都會發生Application(CountWeb)加1,想想看,這樣不就亂套了(什麼!想不出,那肯定是你的主頁終日只有你一個人贊助),所以得有個先來後到的規則。當某一用戶訪問該頁面,需要修改Application(CountWeb)的值時,使用Lock方法加鎖,避免其他用戶修改,修改完後,再解鎖。
從上例中您是否已看出,Application對象提供給所有用戶共享信息(Application(CountWeb)),它所面向的是所有用戶(每個用戶的訪問都會導致計數器加1)。Application對象還有兩個事件,Application_OnStart事件和Application_OnEnd事件(您可千萬別暈,這只是面向對象編程語言中起步的概念),使用時語法如下:
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnEnd
  ‘當WEB服務器關閉時,將激活Application_OnEnd事件
  ‘也就是程序將執行放在這裡的代碼
  ‘因此服務器關閉前我們可以在這裡將wuf17.ASP中Application(CountWeb)的值
  ‘保存起來,如放在一個文本文件中。
End Sub

Sub Application_OnStart
  ‘當第一個用戶浏覽ASP網頁時,將激活Application_OnStart事件,而以後其他用戶浏覽時,就不發生這一事件了
  ‘也就是程序將執行放在這裡的代碼
  ‘因此可在這裡讀出保存在文本文件中Application(CountWeb)的值。
End Sub
</SCRIPT>
下面通過一個實例來說明如何使用事件,該程序的作用是統計站點所有頁面的總點擊數。
文件wuf18.ASP的代碼(站點內其他頁面文件與這個文件類似):
<% @ LANGUAGE = VBScript %>
<% Option Explicit
‘站內所有頁面文件都應包括這句<!--#include file="wuf19.ASP"-->%>
<!--#include file="wuf19.ASP"-->
<Html><BODY>
在服務器關閉重啟之前站點所有頁面總點擊數: <%= Application("CountAll") %>
</BODY></Html>
文件wuf19.ASP的代碼:
<% ' wuf19.ASP
Application.Lock
Application("CountAll") = Application("CountAll") + 1
Application.UnLock
%>
文件wuf18.asp與wuf19.ASP放在同一目錄下。文件global.asa的代碼:
    注意:事件處理程序必須以名為“global.asa”的文本文件存盤,而且必須放在虛擬路徑的根目錄下(一般就是與index.htm或default.htm文件放在同一目錄下,例如:以我的機器為例,就絕對路徑而言,global.asa放在c:\InetPub\home下,而wuf18.asp和wuf19.asp放在c:\InetPub\home\ASP下),同一虛擬路徑只允許有一個global.asa文件存在。
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
'global.asa - wuf18.ASP 在下載包中的文件名為18global.asa,使用時要改名。
Sub Application_OnStart
‘當第一個用戶浏覽網頁時,置計數器初值為0,
‘而以後其他用戶浏覽時,不再執行以下代碼
Application.Lock
Application("CountAll") = 0
    Application.UnLock
End Sub
</SCRIPT>
浏覽wuf18.ASP查看運行結果。看來,僅僅學會使用Application對象並不難。

二、認識session對象。有了前面的Application對象做鋪墊,Session對象就容易多了。它與Application對象類似,只不過是僅僅用來記錄單個用戶的相關信息,它面向單個用戶,因此我們可以使用Session對象存儲某單個用戶的信息。
與Application對象一樣,Session對象也有兩個事件:Session_OnStart事件和Session_OnEnd事件。使用語法與Application對象類似。
值得一提的是,使用Session對象前,必須確認浏覽器的CookIE功能已啟用(默認設置就可以了)。
下面舉一個實例,文件global.asa的要求同上,因此上例中的global.asa將被本例中的global.asa覆蓋。
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
' global.asa - wuf20.ASP 在下載包中文件名為20global.asa
Sub Session_OnStart
Session("In") = Now   ‘函數Now取得當前時間
End Sub

Sub Session_OnEnd
Session("Out") = Now
    Application.Lock
Application("Out") = Session("Out")
Application("In") = Session("In")
    Application(“Out”).UnLock
End Sub
</SCRIPT>
文件wuf20.ASP:
<%@ Language=VBScript %>
<Html>
<BODY>
<% 'wuf20.ASP
Response.Write "默認Timeout設置:" & Session.Timeout & "分鐘<Br>"
Session.Timeout = 1
Response.Write "您進入本站的
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved