Application對象
Application物件是個應用程式層級的對象,用來在所有用戶間共享訊息,並且可以在Web應用程式運作期間持久地保持資料。
Application的屬性:
方法如下:
Application物件沒有內建的屬性,但我們可以自行建立其屬性。
<% Application("屬性名稱")=值%>
其實大部分Application變數都存放在Contents集合中,當你建立一個新的Application變數時,其實就是在Contents集合中加入了一項。下面兩個腳本是等效的:
<% Application("greeting")="hello!" %> 或<% Application.contents("greeting")="hello!"由於Application變數存在集合裡,所以如果想要全部顯示,其方法我們已經多次使用,例如For Each循環。
<%
For Each item IN Application.Contents
Response.write("<br>"&item&Application.Contents(item))
next
%>
Application的方法:
Application的方法只有兩個方法:一個是Lock,另一個是Unlock。其中Lock方法用來確保同一時刻只能一個使用者對Application操作。 Unlock則是用來取消Lock方法的限制。如:
<%
Application.Lock
Application("visitor_num")=Application("visitor_num")+1
Application.Unlock
%>
Application的事件:
1、Application_OnStart()
當事件應用程式啟動時觸發。
2、Application_OnEnd()
此事件應用程式結束時觸發。
這兩個事件過程都是必須定義在Global.asp檔中,一般把連接資料的函數定義在這兩個事件,然後放在Global.asp中。例如:
Sub Application_OnStart
Application("tt18_ConnectionString") = "driver={SQL
Server};server=jeff;uid=sa;pwd=;database=test"
End Sub
一個陣列能夠被定義成Application對象,不過這個陣列只能作為一個對象保存,而不能用Application(0)取出其值。可以定義一個臨時數組實現這種功能。如:
<%
dim Array()
Array=Application("array")
for i = 0 to ubound(array)
Response.write Array(i)
next i
%>
同樣要修改這個Application物件也可以定義一個臨時數組,把Application物件賦給數組,然後修改這個數組的元素,最後把數組賦回Application物件。如:
<%
dim Array()
Array=Application("array")
Array(0)="jeff"
Array(1)="zhu"
Application.lock
Application("array")=Array
Application.unlock
%>
ObjectContext物件
該物件用於控制Active Server Pages的事務處理。交易處理由Microsoft Transaction Server (MTS)管理。
事件
ObjectContext.OnTransactionAbort
由放棄的事務處理事件激發,在腳本完成處理後發生。
ObjectContext.OnTransactionCommit
由成功的事務處理事件激發,在腳本完成處理後發生。
方法
ObjectContext.SetAbort
明確的放棄一次事務處理。
ObjectContext.SetComplete
覆寫前面任何呼叫ObjectContext.SetAbort方法的呼叫。
Request對象
Request物件用於接受所有從瀏覽器發送到你的伺服器的請求內的所有資訊。
集合
Request.ClientCertificate(key[SubField])
所有客戶憑證的資訊的集合。對於Key,該集合具有如下的關鍵字:
Subject
證書的主題。包含所有關於證書收據的資訊。能和所有的子域後綴一起使用。
Issuer
證書的發行人。包含所有關於證書驗證的資訊。除了CN外,能和所有的子域後綴一起使用。
VadidFrom
證書發行的日期。使用VBScript格式。
ValidUntil
該證書不在有效的時間。
SerialNumber
包含該證書的序號。
Certificate
包含整個憑證內容的二進位串流,使用ASN.1格式。
對於SubField,Subject和Issuer關鍵字可以具有如下的子域後綴:(例如:SubjectOU或IssuerL)
C
起源國家。
O
公司或組織名稱。
OU
組織單元。
CN
用戶的常規名稱。
L
局部。
S
州(或省)。
T
個人或公司的標題。
GN
給定名稱。
I
初始。
當檔案cervbs.inc(VBScript使用)或cerjavas.inc(Jscript使用)透過使用#INCLUDE導向包含在你的Active Server Page裡時,下面兩個標誌可以使用:
ceCertPresent
指明客戶證書是否存在,其值為TRUE或FALSE。
ceUnrecongnizedIssure
指明在該鍊錶中的最後的憑證的發行者是否未知,其值為TRUE或FALSE。
Request.Cookies(Cookie[(key).Attribute])
Cookie的集合。允許取得瀏覽器的Cookie。 Cookie指明返回那一個Cookie。 Key用於從Cookie字典中傳回具有某一關鍵字的Cookie值。對於Attribute,你可以使用屬性HasKeys來決定某一Cookie是否有子關鍵字。 HasKeys的值為TRUE或FALSE。
Request.Form(Parameter)[(Index).Count]
填入在HTML的表單中所有的資料的集合。 Parameter是在HTML表單中某一元素的名稱。當某一參數具有不只一個值(例如,當在<SELECT>中使用MULTIPLE屬性時)時,使用Index。當某一參數具有多值時,Count會指明多值個數。
Request.QueryString(Varible)[(Index).Count]
查詢字串的所有值的集合。 Varible是在查詢字串某一變數的名稱。當某一變數具有多於一個值時,使用Index。當某一參數具有多值時,Count指明值的個數。
Request.ServerVaribles(Server Environment Variable)
環境變數的集合。允許讀取HTTP頭。你可以透過使用HTTP_前綴來讀取任何頭資訊。例如,HTTP_USER_AGENT接受客戶代理HTTP頭(瀏覽器類型)。除此之外,你可以使用下表所示的變數來獲得任何環境資訊。
ALL_HTTP
客戶端發送的所有HTTP標頭,他的結果都有前綴HTTP_。
ALL_RAW
客戶端發送的所有HTTP標頭,其結果和客戶端發送時一樣,沒有前綴HTTP_
APPL_MD_PATH
應用程式的元資料庫路徑。
APPL_PHYSICAL_PATH
與應用程式元資料庫路徑對應的實體路徑。
AUTH_PASSWORD
當使用基本驗證模式時,客戶在密碼對話方塊中輸入的密碼。
AUTH_TYPE
這是使用者存取受保護的腳本時,伺服器用於檢驗使用者的驗證方法。
AUTH_USER
代驗證的使用者名稱。
CERT_COOKIE
唯一的客戶證書ID號碼。
CERT_FLAG
客戶證書標誌,如有客戶端證書,則bit0為0。如果客戶端憑證驗證無效,bit1被設定為1。
CERT_ISSUER
使用者憑證中的發行者欄位。
CERT_KEYSIZE
安全通訊端層連接關鍵字的位數,如128。
CERT_SECRETKEYSIZE
伺服器驗證私人關鍵字的位數。如1024。
CERT_SERIALNUMBER
客戶證書的序號欄位。
CERT_SERVER_ISSUER
伺服器憑證的發行者欄位
CERT_SERVER_SUBJECT
伺服器證書的主題欄位。
CERT_SUBJECT
客戶端證書的主題欄位。
CONTENT_LENGTH
客戶端發出內容的長度。
CONTENT_TYPE
客戶發送的form內容或HTTP PUT的資料類型。
GATEWAY_INTERFACE
伺服器使用的網關介面。
HTTPS
如果請求穿過安全通道(SSL),則傳回ON。如果請求來自非安全通道,則返回OFF。
HTTPS_KEYSIZE
安全通訊端層連接關鍵字的位數,如128。
HTTPS_SECRETKEYSIZE
伺服器驗證私人關鍵字的位數。如1024。
HTTPS_SERVER_ISSUER
伺服器憑證的發行者欄位。
HTTPS_SERVER_SUBJECT
伺服器證書的主題欄位。
INSTANCE_ID
IIS實例的ID號。
INSTANCE_META_PATH
回應請求的IIS實例的元資料庫路徑。
LOCAL_ADDR
傳回接受請求的伺服器位址。
LOGON_USER
使用者登入Windows NT的帳號
PATH_INFO
客戶端提供的路徑資訊。
PATH_TRANSLATED
透過由虛擬至物理的映射後得到的路徑。
QUERY_STRING
查詢字串內容。
REMOTE_ADDR
發出請求的遠端主機的IP位址。
REMOTE_HOST
發出請求的遠端主機名稱。
REQUEST_METHOD
提出請求的方法。例如GET、HEAD、POST等等。
SCRIPT_NAME
執行腳本的名稱。
SERVER_NAME
伺服器的主機名稱、DNS位址或IP位址。
SERVER_PORT
接受請求的伺服器連接埠號碼。
SERVER_PORT_SECURE
如果接受請求的伺服器連接埠為安全連接埠時,則為1,否則為0。
SERVER_PROTOCOL
伺服器使用的協定的名稱和版本。
SERVER_SOFTWARE
應答請求並運行網關的伺服器軟體的名稱和版本。
URL
提供URL的基本部分。
方法
Request.BinaryRead(Count)
接收一個HTML表單的未經處理的內容。當呼叫此方法時,Count指明要接收多少位元組。在呼叫此方法後,Count指明實際上接收到多少個位元組。
屬性
Request.TotalBytes
查詢體的長度,以位元組為單位
Response對象
Response對像用於向客戶端瀏覽器發送數據,用戶可以使用該對象將伺服器的數據以HTML的格式發送到用戶端的瀏覽器,它與Request組成了一對接收、發送數據的對象,這也是實現動態的基礎。下面介紹它常用的屬性和方法。
1.Buffer屬性此屬性用於指定頁面輸出時是否要用到緩衝區,預設值為False。當它為True時,直到整個Active Server Page執行結束後才會將結果輸出到瀏覽器上。如:
<%Response.Buffer=True%>
<html>
<Head>
<title>Buffer範例</title>
</head>
<body>
<%
for i=1 至 500
response.write(i & "<br>")
next
%>
</body>
</html>
這頁執行時,整個主頁的所有內容會同時顯示在瀏覽器上,這個主頁會存在快取區中直到腳本執行結束。
2.Expires屬性此屬性用於設定瀏覽器快取頁面的時間長度(單位為分),必須在伺服器端重新整理。透過如下設定:
<%Response.Expires=0%>
透過在ASP檔案中加入這一行程式碼,要求每次請求是重新整理頁面,因為Response一收到頁面就會過期。
3.Write方法該方法把資料傳送到客戶端瀏覽器,如:
<%Response.write "Hello,world!"%>
4.Redirect方法該方法使瀏覽器可以重新定位到另一個URL上,這樣,當客戶發出Web請求時,客戶端的瀏覽器類型已經確定,客戶被重新定位到相應的頁面。如:
<html>
<head>
<title>Redirect範例</title>
</head>
<body>
<form aciton="formjump.asp" method="post">
<select name="wheretogo">
<option selected value="fun">Fun</option>
<option value="news">News</option>
<option value="sample">Sample</option>
</select>
<input type=submit name="jump" value="Jump">
</form>
</body>
</html>
以上是提交的表單,以下是處理表單的檔案formjump.asp:
<%response.buff=true%>
<html>
<head>
<title>Redirect範例</title>
</head>
<body>
<%
thisurl=" http://www.tinyu.com/ ";
where=Request.form("wheretogo")
Select Case where
case "fun"
response.redirect thisurl & "/fun/default.asp"
case "news"
response.redirect thisurl & "/news/default.asp"
case "sample"
response.redirect thisurl & "/sample/default.asp"
End Select
%>
</body>
<html>
這個範例當使用者選擇了以後,按下"Jump"按鈕提交表單,伺服器接到申請後呼叫formjump.asp判斷後定位到對應的URL。不過這裡有一點要注意,HTTP標題已經寫入到客戶瀏覽器,任何HTTP標題的修改必須在寫入頁內容之前,遇到這種問題時,可以如下做:
在文件的開始<@ Language=..>後面寫:
Response.Buffer=True
在結尾定:
Response.Flush
這裡Flush是Response的一個方法,它必須是Buffer屬性設定為True時才能使用,否則會產生一個運作模式錯誤。另外一個Clear方法也是用來清除被快取的頁面,同樣要Buffer屬性設定為True時才能使用。
5.End方法此方法用來告知Active Server當遇到此方法時停止處理ASP檔案。如果Response物件的Buffer屬性設定為True,這時End方法即把快取中的內容傳送到客戶並清除沖區。所以要取消所有向客戶的輸出民,可以先清除緩衝區,然後再利用End方法。如:
<%
Response.buffer=true
On error resume next
Err.clear
if Err.number<>0 then
Response.Clear
Response.End
end if
%>
Server 物件:
Server 物件提供對伺服器上的方法和屬性的存取。其中大多數方法和屬性是作為實用程式的功能服務的。
語法
Server.property|method
屬性
ScriptTimeout:
ScriptTimeout 屬性指定腳本在結束前最大可運行多久。 當處理伺服器元件時,逾時限制將不再生效。
語法 Server.ScriptTimeout = NumSeconds
參數 NumSeconds
指定腳本在被伺服器結束前最大可運行的秒數。預設值為90 秒。
註解透過使用元資料庫中的AspScriptTimeout屬性可以為Web 服務或Web 伺服器設定預設的ScriptTimeout值。 ScriptTimeout屬性不能設定為小於在元資料庫中指定的值。例如,如果NumSeconds設定為10,而元資料庫設定包含了預設值90秒,則腳本在90秒後逾時。但如果NumSeconds設定為100,則腳本在100秒後逾時。
關於使用元資料庫的詳細信息,請參閱關於元資料庫。
範例 在下列範例中,如果伺服器處理腳本超過100 秒,將使之逾時。
<% Server.ScriptTimeout = 100 %>
以下範例取得ScriptTimeout 屬性目前值,並將其儲存於變數TimeOut 中。
<% TimeOut = Server.ScriptTimeout %>
方法
CreateObject
CreateObject 方法建立伺服器元件的實例。如果該元件執行了OnStartPage 和OnEndPage 方法,則此時就會呼叫OnStartPage 方法。有關伺服器組件的詳細信息,請參閱可安裝的ASP 組件。
語法 Server.CreateObject( progID )
參數progID 指定要建立的物件的類型。 progID 的格式為[Vendor.] component[.Version]。
註解預設情況下,由Server.CreateObject 方法建立的物件具有頁面作用域。這就是說,再當前ASP 頁處理完成之後,伺服器就會自動破壞這些物件。若要建立具有會話或應用程式作用域的對象,可以使用<OBJECT> 標記並設定SESSION 或APPLICATION 的SCOPE 屬性,也可以在對話及應用程式變數中儲存該物件。
例如,在如下所示的腳本中,當Session 物件被破壞,即對話逾時時或Abandon 方法被呼叫時,儲存在會話變數中的物件也會被破壞。
<% Set Session("ad") = Server.CreateObject("MSWC.AdRotator")%>
可以透過將變數設為Nothing 或新的值來破壞對象,如下所示。第一個範例釋放ad 對象,第二個範例用字符串代替ad 。
<% Session ("ad") = Nothing %>
<% Session ("ad") = " Other Valum " %>
不能建立與內建物件同名的物件實例。 例如,下列腳本將傳回錯誤。
<% Set Response = Server.CreateObject("Response") %>
範例 <% Set MyAd = Server.CreateObject("MSWC.AdRotator") %>
上面的範例建立一個名為MyAd 的MSWC.AdRotator 伺服器元件,MSWC.AdRotator 元件可用於在Web 頁上的自動輪調廣告。
關於伺服器元件的詳細資訊, 請參閱Creating Components for ASP.
HTMLEncode HTMLEncode方法對指定的字串套用HTML 編碼。
語法 Server.HTMLEncode( string )
參數 string 指定要編碼的字串。
範例腳本 <%= Server.HTMLEncode("The paragraph tag: <P>") %>
輸出 The paragraph tag: <P>
注意以上輸出將被Web 瀏覽器顯示為The paragraph tag: <P>如果查看一下來源文件或以文字方式開啟一個Web 頁,您就可以看到已編碼的HTML。
MapPath
MapPath 方法將指定的相對或虛擬路徑對應到伺服器上對應的實體目錄上。
文法
Server.MapPath( Path )
參數
Path
指定要對應實體目錄的相對或虛擬路徑。若Path 以一個正斜線(/) 或反斜線() 開始,則MapPath 方法返迴路徑時將Path 視為完整的虛擬路徑。若Path 不是以斜線開始,則MapPath 方法傳回同.asp 檔案中已有的路徑相對的路徑。
註解
MapPath 方法不支援相對路徑語法(.) 或(..)。例如,下列相對路徑../MyDir/MyFile.txt 傳回一個錯誤。
MapPath 方法不會檢查傳回的路徑是否正確或在伺服器上是否存在。
因為MapPath 方法只會對應路徑而不管指定的目錄是否存在,所以,您可以先用MapPath 方法來對應實體目錄結構的路徑,然後將其傳遞給在伺服器上建立指定目錄或檔案的元件。
範例對於下列範例,檔案data.txt和包含下列腳本的test.asp檔案都位於目錄C:InetpubWwwrootScript下。 C:InetpubWwwroot目錄被設定為伺服器的宿主目錄。
下列範例使用伺服器變數PATH_INFO 來對應目前檔案的實體路徑。腳本
<%= server.mappath(Request.ServerVariables("PATH_INFO"))%><BR>
輸出
c:inetpubwwwrootscripttest.asp<BR>
由於下列範例中的路徑參數不是以斜線字元開始的,所以它們被相對地對應到目前目錄,這裡是C:InetpubWwwrootScript 。腳本
<%= server.mappath("data.txt")%><BR>
<%= server.mappath("script/data.txt")%><BR>
輸出
c:inetpubwwwrootscriptdata.txt<BR>
c:inetpubwwwrootscriptscriptdata.txt<BR>
接下來的兩個範例使用斜線字元指定回傳的路徑應被視為在伺服器的完整虛擬路徑。腳本
<%= server.mappath("/script/data.txt")%><BR>
<%= server.mappath("script")%><BR>
輸出
c:inetpubscriptdata.txt<BR>
c:inetpubscript<BR>
下列範例示範如何使用正斜線(/) 或反斜線() 傳回宿主目錄的實體路徑。腳本
<%= server.mappath("/")%><BR>
<%= server.mappath("")%><BR>
輸出
c:inetpubwwwroot<BR>
c:inetpubwwwroot<BR>
URLEncode
URLEncode 方法將URL 編碼規則,包括轉義字符,套用到指定的字串。
文法
Server.URLEncode( string )
參數
String 指定要編碼的字串。
範例腳本<%Response.Write(Server.URLEncode(" http://www.tinyu.com ";)) %>
輸出http%3A%2F%2Fwww%2Etinyu%2Ecom
Session物件
Session其實指的就是訪客從到達某個特定首頁到離開為止的那段時間。每個訪客都會單獨獲得一個Session。在Web應用程式中,當一個使用者存取應用程式時,Session類型的變數可以讓這個使用者在該Web應用程式的所有頁面中共享資料;如果另一個使用者也同時存取該Web應用,他也擁有自己的Session變量,但兩個使用者之間無法透過Session變數共享訊息,而Application類型的變更則可以實現網站多個使用者之間在所有頁面中共享資訊。
1.SessionID屬性此屬性傳回目前會話的唯一標誌,為每一個Session指派不同的編號。
我曾在開發過程中就遇到對使用者的控制問題。它要實現的功能就是,針對某個網站的一個模組,當一個會員登入後正在看此模組時,另一個人用同樣的會員名登錄,就不能瀏覽這個模組。也就是說一個會員名同時只能一個人瀏覽此模組。我透過用會員名(假設為UserID,唯一)和SessionID來實現了控制。當會員登入時,給這個會員一個Session記錄登入狀態如:Session("Status")="Logged",同時把這個會員的Session.SessionID寫入資料庫。當他要瀏覽此模組時,先判斷是否登錄,若已登入再判斷它的SessionID是否與資料庫記錄的相同,如果不同則無法存取。這樣,當另一個使用者以相同的會員名稱登入時,那麼資料庫中記錄的就是新的SessionID,前者存取此模組時就不能通過檢查。這就實現了一個會員名稱同時只能一個人瀏覽某個模組。這個功能在一些收費網站有很特別作用,它防止了一個會員名稱給多個人瀏覽的問題,為公司保障了利益。
2.TimeOut屬性此屬性用來定義使用者Session物件的時限。如果使用者在規定的時間內沒有刷新網頁,則Session物件就會終止。一般預設為20分鐘。
3.Abandon方法此方法是Session物件的唯一方法,可以清除Session對象,用來消除使用者的Session物件並釋放其所佔的資源。如: <% Session.Abandon %>
4.Session_OnStart和Session_OnEnd事件和Application一樣,當物件的例程每一次啟動時觸發Session_OnStart事件,然後執行Session_Onstart事件的處理過程。也就是說,當伺服器接收到應用程式中的URL的HTTP請求時,觸發此事件,並建立一個Session物件。同理,這個事件也必須定在Global.asa檔案中。
當呼叫Session.Abandon方法時或在TimeOut的時間內沒有刷新,這會觸發Session_OnEnd事件,然後執行裡面的腳本。 Session變數與特定的使用者相聯繫,針對某一個使用者賦值的Session變數是和其他使用者的Session變數完全獨立的,不會有相互影響。
Session應用一列:
與Application一樣,一個被定義為Session類型的陣列只能將整個陣列作為一個對象,使用者不能直接改變Session陣列中某個元素的值。為了創建一個Session數組,需要先定義一個普通的數組,並對它的每個元素賦初值,最後把它定義為一個Session數組。如:
<%
dim array()
array=array("李","明","男")
Session("info")=array
Response.write Session("info")(0) &"-"
Response.write Session("info")(1) &"-"
Response.write Session("info")(2) &"<br>"
%>
<hr>
<%
array(0)="天"
array(1)="宇"
array(2)="男"
Session("info")=array
Response.write Session("info")(0) & "-"
Response.write Session("info")(1) & "-"
Response.write Session("info")(2) & "<br>"
%>