1. 程式人生 > >Request 物件詳解

Request 物件詳解

一、Request 物件

可以使用 Request 物件訪問任何基於 HTTP 請求傳遞的所有資訊,包括從 HTML 表格用 POST 方法或 GET 方法傳遞的引數、cookie 和使用者認證。Request 物件使您能夠訪問客戶端傳送給伺服器的二進位制資料。

Request 的語法 :

Request[. 集合 | 屬性 | 方法 ]( 變數 )

在這裡作者將挑選一些常用的物件語法進行分析

1、Form

Form 集合通過使用 POST 方法的表格檢索郵送到 HTTP 請求正文中的表格元素的值。

語法

Request.Form(element)[(index)|.Count]

引數

element 指定集合要檢索的表格元素的名稱。

index 可選引數,使用該引數可以訪問某引數中多個值中的一個。它可以是 1 到 Request.Form(parameter).Count 之間的任意整數。

Count 集合中元素的個數

Form 集合按請求正文中引數的名稱來索引。Request.Form(element) 的值是請求正文中所有 element 值的陣列。通過呼叫 Request.Form(element).Count 來確定引數中值的個數。如果引數未關聯多個值,則計數為 1。如果找不到引數,計數為 0。要引用有多個值的表格元素中的單個值,必須指定 index 值。index 引數可以是從 1 到 Request.Form(element).Count 中的任意數字。如果引用多個表格引數中的一個,而未指定 index 值,返回的資料將是以逗號分隔的字串。
可以使用重述符來顯示錶格請求中的所有資料值。例如,使用者通過指定幾個值填寫表格,

對於 hobby 引數,您可以使用下面的指令碼檢索這些值。 < html> < head>< title>< /title>< /head> < body> < p> 請填寫你的愛好 < /p> < form method="POST" action="form.asp"> < p>< input type="text" name="hobby" size="20">< br> < input type="checkbox" name="hobby" value=" 足球 "> 足球 < input type="checkbox" name="hobby" value=" 乒乓球 "> 乒乓球 < /p> < p>< input type="submit" value=" 傳送 " name="B1">< input type="reset" value=" 重填 " name="B2">< /p> < /form> < % For Each i In Request.Form("hobby") Response.Write i & "< BR>" Next %> < /body>< /html>

將以上程式碼剪貼到記事簿中(注意將“< ”後面的空格去掉),儲存為 form.asp 檔案並執行,request 物件可以根據你在 form 中填入或選擇元素內容的不同將元素逐個顯示出來。

當然使用 For...Next 迴圈也可以生成同樣的輸出,如下所示 :

< %

For i = 1 To Request.Form("hobby").Count

Response.Write Request.Form("hobby")(i) & "< BR>"Next

%>

2、QueryString

QueryString 集合檢索 HTTP 查詢字串中變數的值 ,HTTP 查詢字串由問號 (?) 後的值指定。如:

< A HREF= "example.asp?string=this is a sample">string sample< /A>

生成值為 "this is a sample" 的變數名字串。通過傳送表格或由使用者在其瀏覽器的地址框中鍵入查詢也可以生成查詢字串。

語法

Request.QueryString(variable)[(index)|.Count]

QueryString 集合可以讓您以名稱檢索 QUERY_STRING 變數。Request.QueryString( 引數 ) 的值是出現在 QUERY_STRING 中所有引數的值的陣列。通過呼叫Request.QueryString(parameter).Count 可以確定引數有多少個值。

我們也可以使用 QueryString 來達到與前一個範例相同的功能。只需要將 request.form 部分替換如下:

< %

For Each i In Request.querystring("hobby")

Response.Write i & "< BR>"

Next

%>

3、Cookies

什麼是 Cookie?Cookie 其實是一個標籤,當你訪問一個需要唯一標識你的站址的 WEB 站點時,它會在你的硬碟上留下一個標記,下一次你訪問同一個站點時,站點的頁面會查詢這個標記。每個 WEB 站點都有自己的標記,標記的內容可以隨時讀取,但只能由該站點的頁面完成。每個站點的 Cookie 與其他所有站點的 Cookie 存在同一資料夾中的不同檔案內(你可以在 Windows 的目錄下的 Cookie 資料夾中找到它們)。一個 Cookie 就是一個唯一標識客戶的標記,Cookie 可以包含在一個對話期或幾個對話期之間某個 WEB 站點的所有頁面共享的資訊,使用 Cookie 還可以在頁面之間交換資訊。Request 提供的 Cookies 集合允許使用者檢索在 HTTP 請求中傳送的 cookie 的值。這項功能經常被使用在要求認證客戶密碼以及電子公告板、WEB 聊天室等 ASP 程式中。
語法

Request.Cookies(cookie)[(key)|.attribute]

引數

cookie 指定要檢索其值的 cookie。

key 可選引數,用於從 cookie 字典中檢索子關鍵字的值。

attribe 指定 cookie 自身的有關資訊。如:HasKeys 只讀,指定 cookie 是否包含關鍵字。

可以通過包含一個 key 值來訪問 cookie 字典的子關鍵字。如果訪問 cookie 字典時未指定 key,則所有關鍵字都會作為單個查詢字串返回。例如,如果 MyCookie 有兩個關鍵字 , First 和 Second,而在呼叫 Request.Cookies 時並未指定其中任何一個關鍵字,那麼將返回下列字串。
First=firstkeyvalue&Second=secondkeyvalue

如果客戶端瀏覽器傳送了兩個同名的 cookie,那麼 Request.Cookie 將返回其中路徑結構較深的一個。例如,如果有兩個同名的的 cookie,但其中一個的路徑屬性為 /www/ 而另一個為 /www/home/,客戶端瀏覽器同時將兩個 cookie 都發送到 /www/home/ 目錄中,那麼 Request.Cookie 將只返回第二個 cookie。
要確定某個 cookie 是不是 cookie 字典(cookie 有否有關鍵字),可使用下列指令碼。

< %= Request.Cookies("myCookie").HasKeys %>

如果 myCookie 是一個 cookie 字典,則前面的賦值為 TRUE。否則,為 FALSE。下面我們來看看一個 cookie 的應用例項:

< %

nickname=request.form("nick")response.cookies("nick")=nickname

' 用 response 物件將使用者名稱寫入 Cookie 之中

response.write " 歡迎 "&request.cookies("nick")&" 光臨小站!"

%>

< html>< head>< meta http-equiv="Content-Type" content="text/html; charset=gb2312">

< title>cookie< /title>

< meta name="GENERATOR" content="Microsoft FrontPage 3.0">< /head>

< body>

< form method="POST" action="cookie.asp">

< p>< input type="text" name="nick" size="20">

< input type="submit" value=" 傳送 " name="B1">< input type="reset" value=" 重填 " name="B2">< /p>< /form>

< /body>< /html>

這其實是一個在基於 WEB 的 BBS 或 CHAT 的 ASP 程式中常用的手法,它將使用者在起始頁面上填入的姓名儲存在 cookie 中,這樣後面的程式就可以很容易地呼叫該使用者的 nick 了。

4、ServerVariables

大家都知道在瀏覽器中瀏覽網頁的時候使用的傳輸協議是 HTTP,在 HTTP 的標題檔案中會記錄一些客戶端的資訊,如 : 客戶的 IP 地址等等,有時伺服器端需要根據不同的客戶端資訊做出不同的反映,這時候就需要用 ServerVariables 集合獲取所需資訊。

語法

Request.ServerVariables ( 伺服器環境變數 )

由於伺服器環境變數較多,作者僅將一些常用的變數在下表中列出 :

ALL_HTTP 客戶端傳送的所有 HTTP 標題檔案。
CONTENT_LENGTH 客戶端發出內容的長度。
CONTENT_TYPE 內容的資料型別。如:“text/html”。同附加資訊 的查詢一起使用,如 HTTP 查詢 GET、POST 和 PUT。
LOCAL_ADDR 返回接受請求的伺服器地址。如果在繫結多 個 IP 地址的多宿主機器上查詢請求所使用的地址 時,這條變數非常重要。
LOGON_USER 使用者登入 Windows NT 的帳號。
QUERY_STRING 查詢 HTTP 請求中問號(?)後的資訊。
REMOTE_ADDR 發出請求的遠端主機 (client) 的 IP 地址。
REMOTE_HOST 發出請求的主機 (client) 名稱。如果伺服器無此 資訊,它將設定為空的 MOTE_ADDR 變數。
REQUEST_METHOD 該方法用於提出請求。相當於用於 HTTP 的 GET、HEAD、POST等 等。
SERVER_NAME 出現在自引用 URL 中的伺服器主機名、DNS 化名 或 IP 地址。
SERVER_PORT 傳送請求的埠號。

我們可以使用以下指令碼打印出所有的伺服器環境變數。

< TABLE>

< TR>< TD>< B>Server Variable< /B>< /TD>< TD>< B>Value< /B>< /TD>< /TR>< % For Each name In Request.ServerVariables %>

< TR>< TD> < %= name %> < /TD>< TD> < %= Request.ServerVariables(name) %> < /TD>< /TR>< /TABLE>

< % Next %>