帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP编程
使用ServerVariables集合
作者:佚名 发布时间:2005-04-02 来源:不详
   当讨论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集合。
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·ASP脚本组件--使用WSC的环境  (2005-04-02)
 ·使用数据库中的图像  (2005-04-02)
 ·监测站点使用多少session和appli  (2005-04-02)
 ·15种asp使用技巧  (2005-04-02)
 ·在你的ASP中使用类(class)  (2005-04-02)
 ·使用Server.scripttimeout来减少  (2005-04-02)
 ·使用ASP加密算法加密你的数据  (2005-04-02)
 ·技巧之一:提高使用Request集合的  (2005-04-02)
 ·使用InstallShield制作ASP安装程  (2005-04-02)
 ·ADSI,使用ASP来实现通用的对数据  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·在ASP中使用数据库
·使用ASP脚本技术
·通过启动脚本来感受ASP的力量
·学习使用ASP对象和组件
·解析asp的脚本语言
·初看ASP-针对初学者
·ASP开发10条经验总结
·ASP之对象总结
·ASP与数据库应用(给初学者)
·关于学习ASP和编程的28个观点
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统