使用ServerVariables集合

來源:互聯網
上載者:User
server|集合


     當討論Request對象內容時,要研究的集合之一就是ServerVariables集合。這個集合包含了兩種值的結合體,一種是隨同頁面請求從用戶端發送到伺服器的HTTP前序中的值,另外一種是由伺服器在接收到請求時本身所提供的值。為顯示ServerVariables集合中值的使用方式,在Request Object頁面(Show_request.asp)中,點擊“ServerVariables Examples”連結,開啟另外一個頁面,如下圖所示:

     下圖所示視窗顯示的是ServerVariables集合中一些非常有用的值的一個子集。


     “自引用”頁面
     在ServerVariables集合中返回的值包含Web伺服器的詳細資料和當前頁面的路徑資訊。在任何地方建立一個頁面都可使用這些資訊。例如建立一個“自引用”頁面,此頁面能夠再次調用自身完成另一項任務,我們可以用以下代碼:
     <FORM ACTION=”<% = Request.ServerVariables(“PATH_INFO”) %>” METHOD=”POST”>
     同樣的效果可以用HTTP的“SCRIPT_NAME”值獲得:
     <FORM ACTION=”<% = Request.ServerVariables(“SCRIPT_NAME”) %>” METHOD=”POST”>
     使用<A>元素開啟一個不同頁,可以使用:
     ...
     <%
     strFullPath = Request.ServerVariables(“PATH_INFO”)
     ‘Strip off the file name
     strPathOnly = Left(strFullPath, InStrRev(strFullPath, “/”))
     strNextPage = strPathOnly & “pages/next_page.asp”
     %>
     ...
     <A HREF=”<% = strNextPage %>”>Next Page</A>
     ...
     即使原始頁面的名稱或位置發生變化,這些執行個體都能正常工作,因為使用了當前頁面的路徑資訊(當然,第二個例子在分離的目標頁的名稱發生變化時運行會失敗)。
     換句話說,如果為搜尋引擎的子會話自動建立URL,可以收集ServerVariable的一些值:
     strFullURL = http:// & Request.ServerVariables(“LOCAL_ADDR”) _
     & “:” & Request.ServerVariables(“SERVER_PORT”) _
     & Request.ServerVariables(“PATH_INFO”)
     這將建立一個完整的URL包括連接埠號碼(這種情況下,不是標準值80)。例如,結果可能是:
     http://194.74.60.254:1768/thispath/thispage.asp

     檢測瀏覽器的版本
     ServerVariables集合中,另外一個有用的值是使用者瀏覽器的使用者代理程式字串。在“Detecting the Browser Type”頁面(browsertype.asp),使用ServerVariables集合中的“HTTP_USER_AGENT”值來獲得使用者代理程式字串,一些指令碼用來解析該資訊並尋找生產廠家名稱和瀏覽器版本。
     <%
     strUA = Request.ServerVariables(“HTTP_USER_AGENT”)
     Response.Write “The User Agent string is <B>” & strUA & “</B>
     ”
     If InStr(strUA, “MSIE”) Then
     Response.Write “To upgrade your browser go to “_
     & “<A HREF=” & Chr(34) & http://www.microsoft.com/ie/”_
     & Chr(34) & “>http://www.microsoft.com/ie/<A>
     ”
     intVersion = Cint(Mid(strUA, InStr(strUA, “MSIE”) + 5, 1))
     If intVersion >=4 Then
     Response.Write “You can use Microsoft Dynamic HTML”
     End If
     Else
     If InStr(strUA, “Mozilla”) Then
     If InStr(strUA, “compatible;”) = 0 Then
     Response.Write “Your browser is probably Navigator. You can “_
     & “download the latest version of Navigator from “_
     & “<A HREF=” & Chr(34) & http://home.netscape.com/”_
     & “download/”& Chr(34) & “>http://home.netscape.com”_
     & “/download/</A>
     ”
     intVersion = Cint(Mid(strUA, InStr(strUA, “/”) +1, 1))
     If intVersion >= 4 Then
     Response.Write “You can probably use Netscape Dynamic HTML”
     End If
     Else
     strVersion = Mid(strUA, InStr(strUA, “compatible;”) + 12)
     strProduct = Left(strVersion, InStr(strVersion, “ “))
     Response.Write “Your browser is Navigator-compatible. You can”_
     & “search for the manufacturer using a search engine, such as”_
     & “<A HREF=” & Chr(34) _
     & “http://www.altavista.digital.com/cgi-bin/query?q=”_
     & strProduct _
     & Chr(34) & “>http://www.altavista.com/</A>
     ”
     End If
     End If
     End If
     %>
     對IE 5.0和Navigator 4.61的搜尋結果分別不同,對於其他廠家的瀏覽器,可以得到一個連結在Alta Vista Web網站自動開始搜尋廠家的名稱。


     注意,Netscape在使用者代理程式字串中不提供廠家的名稱,因而無法絕對保證一個瀏覽器一定是Navigator。

     檢測瀏覽器的語言
     ServerVariables集合中另外一個有用的值是“HTTP_ACCEPT_LANGUAGE”,它包含了一個當瀏覽器安裝時指定的,或寫入程式碼進使用者的地區版本的語言代碼。語言代碼的例子有en-us(英國、美國)、de-at(德國、澳大利亞)和es-pe(西班牙、秘魯)。
     語言代碼可以是一般的且省略方言標識:例如,在我們的網站Wrox者,大批瀏覽者都是將en(英語)作為語言代碼。
     因此,可以檢測語言代碼並自動裝載一個合適的特定地區或指定語言版本的頁面。
     StrLocale = Lcase(Left(Request.ServerVariables(“HTTP_ACCEPT_LANGUAGE”),2))
     Select Case strLocale
     Case “en”: Response.Redirect “http://uk_site.co.uk/”
     Case “de”: Response.Redirect “http://de_site.co.de/”
     Case “fr”: Response.Redirect “http://fr_site.co.fr/”
     ‘... etc
     Case Else: Response.Redirect “http://us_sitel.com/”
     End Select
     或者根據特定的方言,重新導向頁面:
     strLocale = Lcase(Request.ServerVariables(“HTTP_ACCEPT_LANGUAGE”))
     Select Case strLocale
     Case “en-gb”: Response.Redirect “http://uk_site.co.uk/”
     Case “en-us”: Response.Redirect “http://us_site.com/”
     Case “es-pe”: Response.Redirect “http://es_site2.co.pe/”
     ‘...
     Case Else: Response.Redirect “http://us_site1.com/”
     End Select
    
     其他有用的ServerVariables集合的值
     可以訪問和使用ServerVariables集合中的任何一成員,控制ASP頁面響應一個請求的方式。可以檢查一個瀏覽者訪問網站時使用的是否是預設連接埠80或還是另一個。在這個例子裡,尋找通過連接埠443的訪問——這個連接埠提供的是安全通訊端層(Secure Socket Layer,SSI)訪問(和其他的協議),且將它們重新導向到一個相應的頁面。
     If Request.ServerVariables(“SERVER_PORT”) = “443”) Then
     Response.Redirect “/securesite/default.asp” ‘Secure user
     Else
     Response.Redirect “/normalsite/default.asp” ‘Non-secure user
     End If
     假如要求瀏覽者註冊且由伺服器驗證(而不是允許他們在Web伺服器的IUSER帳號下匿名訪問,這個問題將在後面章節中詳細討論),可以查詢使用者名稱稱,來判定正在與我們打交道的使用者是誰,是否裝載頁面給該使用者。例如,下面的這個代碼將只向名為Administrator的使用者顯示管理連結。
     ...
     <A HREF=”dispcnfg.asp”>Change Display Configuration</A>

     <A HREF=”dispcolr.asp”>Change Display Colors</A>
    
     <A HREF=”keyboard.asp”>Change Keyboard Configuration</A>

     <%
     If Request.ServerVariables(“AUTH_USER”) _
     = Ucase(Request.ServerVariables(“SERVER_NAME”)) & “Administrator” Then
     %>
     <A HREF=”allusers.asp”>Administer All Users</A>
    
     <A HREF=”usrlogon.asp”>Administer Logon Information</A>
     <%
     End If
     %>
     ...
     注意ASP不填寫ServerVariables集合直到你訪問其中的一個成員。首次訪問該集合的一個成員將使IIS得到它的全部,應只在需要時才使用ServerVariables集合。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。