一了解Application對象 為了提神
我們先看一個計數器的例程(你應該運行它以便於理解)
先編輯一個文件
<html>
<body>
記錄某個頁面的點擊數示例
<a >wuf
asp</a>
</body>
</html>
wuf
asp的代碼如下
<% @ LANGUAGE = VBScript %>
<%
wuf
asp
記錄某一頁面的訪問數(計數器原理)
Option Explicit
Dim CountWeb
CountWeb = Request
ServerVariables(
SCRIPT_NAME
)
這樣保證每個頁面都有一個唯一的變量
避免混亂
%>
<HTML><BODY>
<%
Response
Write CountWeb &
<Br><Br>
& vbcrlf
Application
Lock
請看講解
Application(CountWeb) = Application(CountWeb) +
累加器
點擊數加
Application
UnLock
Response
Write
WEB服務器關閉重啟前該頁的點擊總數為:
& Application(CountWeb)
%>
</BODY></HTML>
運行這個程序時
對大部分的人來說
只有一台機器
既是Web服務器
又是客戶端
那麼你只能想象這樣一種境況了
你的這兩個主頁文件放在很遠的Web服務器上
而如潮水般的國內外用戶正通過浏覽器訪問它們
每個用戶點擊一次
Application(CountWeb) 的值就加
而且只要存放文件wuf
asp的服務器沒有關閉
Application(CountWeb)就將一直累加下去
但是注意
如果服務器關閉後重啟
則Application(CountWeb)將重新從
開始計數(我暈
我說我的頁面訪問數怎麼老是一位數)
為了避免這種永遠從零開始的計數情況
你必須要在服務器關閉之前將Application(CountWeb)的值保存起來
下次需要時再取出來
就能夠順序累計下去了
具體如何做
且聽N回後分解
接下來的問題
就是Application
Lock
UnLock是什麼意思?剛才我們做了一個假設
大量的用戶正在訪問該頁面
而每一個用戶的點擊都會發生Application(CountWeb)加
想想看
這樣不就亂套了(什麼!想不出
那肯定是你的主頁終日只有你一個人贊助)
所以得有個先來後到的規則
當某一用戶訪問該頁面
需要修改Application(CountWeb)的值時
使用Lock方法加鎖
避免其他用戶修改
修改完後
再解鎖
從上例中您是否已看出
Application對象提供給所有用戶共享信息(Application(CountWeb))
它所面向的是所有用戶(每個用戶的訪問都會導致計數器加
)
Application對象還有兩個事件
Application_OnStart事件和Application_OnEnd事件(您可千萬別暈
這只是面向對象編程語言中起步的概念)
使用時語法如下
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnEnd
當WEB服務器關閉時
將激活Application_OnEnd事件
也就是程序將執行放在這裡的代碼
因此服務器關閉前我們可以在這裡將wuf
asp中Application(CountWeb)的值
保存起來
如放在一個文本文件中
End Sub
Sub Application_OnStart
當第一個用戶浏覽ASP網頁時
將激活Application_OnStart事件
而以後其他用戶浏覽時
就不發生這一事件了
也就是程序將執行放在這裡的代碼
因此可在這裡讀出保存在文本文件中Application(CountWeb)的值
End Sub
</SCRIPT>
下面通過一個實例來說明如何使用事件
該程序的作用是統計站點所有頁面的總點擊數
文件wuf
asp的代碼(站點內其他頁面文件與這個文件類似)
<% @ LANGUAGE = VBScript %>
<% Option Explicit
站內所有頁面文件都應包括這句<!
#include file=
wuf
asp
>%>
<!
#include file=
wuf
asp
>
<HTML><BODY>
在服務器關閉重啟之前站點所有頁面總點擊數: <%= Application(
CountAll
) %>
</BODY></HTML>
文件wuf
asp的代碼
<%
wuf
asp
Application
Lock
Application(
CountAll
) = Application(
CountAll
) +
Application
UnLock
%>
文件wuf
asp與wuf
asp放在同一目錄下
文件global
asa的代碼
注意
事件處理程序必須以名為
global
asa
的文本文件存盤
而且必須放在虛擬路徑的根目錄下(一般就是與或文件放在同一目錄下
例如
以我的機器為例
就絕對路徑而言
global
asa放在c:\InetPub\home下
而wuf
asp和wuf
asp放在c:\InetPub\home\asp下)
同一虛擬路徑只允許有一個global
asa文件存在
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
global
asa
wuf
asp 在下載包中的文件名為
global
asa
使用時要改名
Sub Application_OnStart
當第一個用戶浏覽網頁時
置計數器初值為
而以後其他用戶浏覽時
不再執行以下代碼
Application
Lock
Application(
CountAll
) =
Application
UnLock
End Sub
</SCRIPT>
浏覽wuf
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
wuf
asp 在下載包中文件名為
global
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>
文件wuf
asp
<%@ Language=VBScript %>
<HTML>
<BODY>
<%
wuf
asp
Response
Write
默認Timeout設置:
& Session
Timeout &
分鐘<Br>
Session
Timeout =
Response
Write
您進入本站的時間:
& Session(
In
) &
<Br>
Response
Write
請在
分鐘後刷新本頁
&
<Br><Br>
if Not IsEmpty(Application(
Out
)) then
Response
Write
您上次進入本站的時間:
& Application(
In
) &
<Br>
Response
Write
您上次離開本站的時間:
& Application(
Out
) &
<Br>
Response
Write
浏覽時間(分鐘):
&_
Datediff(
n
Application(
In
)
Application(
Out
)) &
<Br><Br>
End If
if IsEmpty(Session(
Out
)) then
Response
Write
刷新前和刷新後Session(
Out
)的值都為空
&
<Br>
End If
%>
</BODY>
</HTML>
當用戶第一次浏覽網頁時
發生Session_OnStart事件
程序記錄用戶本次進入網頁的時間
而此時不會發生Session_OnEnd事件
故Application(
Out
)值為空
程序不會顯示浏覽時間
我們知道
Application對象的生存期為第一個用戶浏覽網頁直至服務器關閉
而Session對象的生存期為用戶第一次浏覽網頁(會話開始)直至會話結束
那什麼時候會話結束呢?具體到本例中
Session
Timeout =
設置會話超時為
分鐘
即如果長達
分鐘沒有向Web服務器提供請求
則會話超時
導致會話結束
發生Session_OnEnd事件
程序執行Session_OnEnd內的代碼
在這裡我們將進入和離開時間分別放入Application(
In
)和Application(
Out
)
因為會話結束後
Session對象將不復存在
這點我們在代碼的最後做了驗證
從這個例程
可以看出
. Application對象和Session對象的生存期不同
. Session對象是針對單個用戶的
它的值存放在客戶端
其他用戶的浏覽對該單用戶的Session對象沒有任何影響
單個用戶只能讀寫自己Session對象的值(如
Session(
In
))
. 注意在Response
Write中顯示雙引號的表示方法
(
Out
)
. 特別提醒
該程序沒有實用性
僅供調試用(僅適用於只有一個用戶浏覽的情況)
請思考這是為什麼?答案見本文末
提示
請注意Application對象的特性
三一個經典的實例如何在網頁上顯示在線人數 在下面的例子中
用Application(
Online
)來存放在線人數
用Application(
CountAll
)存放總訪問人數
原理
當一個新用戶浏覽網頁時
發生Session_OnStart事件
在線人數加
訪問用戶數也加
當某用戶離開時
會話超時後會發生Session_OnEnd事件
在線人數減
Global
asa代碼如下
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Global
asa
wuf
asp
Sub Application_OnStart
Application
Lock
在這裡讀出Application(
CountAll
)的初始值
Application
UnLock
End Sub
Sub Session_OnStart
Applic
From:http://tw.wingwit.com/Article/program/net/201311/13475.html