在Web應用程式中,當一個使用者訪問該應用時,Session類型的變數可以供這個使用者在該Web應用的所有頁面中共用資料;如果另一個使用者也同時訪問該Web應用,他也擁有自己的Session變數,但兩個使用者之間無法通過Session變數共用資訊,而Application類型的變數則可以實現網站多個使用者之間在所有
頁面中共用資訊。可以理解Session是局部變數,而Application則為全域變數。
在同一虛擬目錄及其子目錄下的所有 .asp 檔案構成了 ASP 應用程式。我們非但可以使用 Application 對象,在給定的應用程式的所有使用者之間共用資訊,並在伺服器運行期間持久的儲存資料。而且,Application 對象還有控制訪問應用程式層資料的方法和可用於在應用程式啟動和停止時觸發過程的事件。
一、Application("name")=Value
正如Session("name")=value一樣,Application對象也沒有內建的屬性。當然使用者可以自訂屬性,該屬性也可稱為集合。
一旦分配了Application對象的屬性,它就會持久地存在,直到關閉WEB伺服器服務使得 Application 停止。由於儲存在 Application 對象中的數值可以被應用程式的所有使用者讀取,所以 Application 對象的屬性特別適合在應用程式的使用者之間傳遞資訊。
<% Application("MyName") = "cnbruce" %> |
二、Application.Lock
Lock方法是禁止其他使用者修改Application對象的屬性,以確保在同一時刻僅有一個客戶可修改和存取 Application 變數。如果使用者沒有明確調用 Unlock 方法,則伺服器將會在 .asp 檔案結束或逾時後即解除對 Application 對象的鎖定。最簡單的就是進行頁面記數的例子了。
1,num.asp
<% Application.Lock Application("NumVisits") = Application("NumVisits") + 1 Application.Unlock %> 你是本頁的第<%=Application("NumVisits")%>位訪問者 |
當然,若如果你需要記數的初始值那就該寫個判斷了。
<% if Application("NumVisits")<9999 then Application("NumVisits")=10000 end if Application.Lock Application("NumVisits") = Application("NumVisits") + 1 Application.Unlock %> 你是本頁的第<%=Application("NumVisits")%>位訪問者 |
上面的程式,你會發現每重新整理一次,都會記數累加,如按IP值訪問來記數的話,則建立一個Session
2,vnum.asp
<% if session("visitnum")="" then Application.Lock Application("NumVisits") = Application("NumVisits") + 1 Application.Unlock session("visitnum")="visited" end if %> 你是本頁的第<%=Application("NumVisits")%>位訪問者 |
三、Application.Unlock
與Lock方法相反,Unlock方法是允許其他使用者修改 Application 對象的屬性。可以看出在上面的例子中,Unlock方法解除對象的鎖定,使得下一個用戶端能夠增加 NumVisits 的值。
當然需要注意的是:記數要確保伺服器不被重啟,因為所以的訪問是數值是建立在頁面之上的,並未進行儲存成檔案或儲存到資料庫這樣的處理。
一般當伺服器重新啟動就會觸發Application的事件了。
四、Application_OnEnd
Application_OnEnd 事件在應用程式退出時於 Session_OnEnd 事件之後發生,當然Application_OnEnd 事件的處理過程也必須寫在 Global.asa 檔案之中。
比如上面的程式中,若伺服器關機必然會觸發Application_OnEnd事件,那麼該事件就可以進行資料儲存的工作,已使得下次資料的續沿。
當然Application_OnEnd 事件在應用程式退出時於Session_OnEnd 事件之後發生
<SCRIPT LANGUAGE="VBScript" RUNAT="Server"> ............. Sub Application_OnEnd ............. End Sub ............. </SCRIPT> |
五、Application_OnStart
Application_OnStart 事件在首次建立新的會話( 即 Session_OnStart 事件 )之前發生。當WEB伺服器啟動並允許對應用程式所包含的檔案進行請求時就觸發Application_OnStart事件。
<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server> ............. Sub Application_OnStart ............. End Sub ............. </SCRIPT> |
所以現在可以將Global.asa內部的代碼可以想象
<SCRIPT LANGUAGE="VBScript" RUNAT="Server"> Sub Application_OnStart ..................... End Sub Sub Session_OnStart ..................... End Sub Sub Session_OnEnd ..................... End Sub Sub Application_OnEnd ..................... End Sub </SCRIPT> |
具體Global.asa是怎麼一回事?且聽下回分解啊:)
5大對象基本掌握了,來個例題練習下
<%@ LANGUAGE = VBScript %> <% Option Explicit %> <Html> <title>猜數字遊戲</title> <body> <% '設定頁面不使用緩衝 Response.Expires = 0 %> <% dim GuessNum on error resume next GuessNum=Request("Number") if GuessNum="" then GuessNum="0" End if GuessNum=Clng(GuessNum)Session("Count")=Session("Count") + 1 if Session("Count") < 10 and GuessNum <> session("Number") then %> <form action="guessNumber.asp"> <input type="text" name="Number"> <input type="submit" value="提交"> </form> <hr> <% end if if GuessNum<0 or guessNum>100 then Response.write "請輸入1~100之間的整數" elseif GuessNum=0 then session("Count") = 0 Randomize session("Number") = Int(rnd * 100 + 1) Response.write "請輸入1~100之間的整數" elseif GuessNum > session("Number") then response.write "你猜的太大了" elseif GuessNum < session("Number") then response.write "你猜的太小了" elseif GuessNum = session("Number") then response.write "祝賀你,猜對了" end if Response.write "<br>共猜了" & Session("Count") & "次" if Session("Count")=10 then Response.write "答案是" & Session("Number") end if %> <a href="guessnumber.asp?Number=0">重新猜</a> </body> </html> |
Test URL: http://www.cnbruce.com/test/aspcode/guessnumber.asp