·您的位置: 首页 » 资源教程 » 编程开发 » ASP » 使用SERVER.TRANSFER对URL进行隐藏以及其他

使用SERVER.TRANSFER对URL进行隐藏以及其他

类别: ASP教程  评论数:0 总得分:0
我的初步想法是:在一个xml文件中记录所有的名称-地址对照集合,然后在default.asp中读取这个集合,在查询字符串的pg中读取page name, 然后Server.Transfer到相应的页面中。关键代码如下:

default.asp:

<!--#include file="Functions.asp"-->

<%

On Error Resume Next

Response.CharSet = "gb2312"



Dim opageName, opageURL

opageName = Request.QueryString("pg")

If opageName <> "" Then

opageURL = GetPage(opageName)

Else

Response.Write "OKOK, You didn\'t pass a pg parameter."

Response.End

End If



If opageURL = "" Then

Response.Write "找不到映射文件for: " & opageName

Else

Server.Transfer(opageURL)

End If



If Err.Number <> 0 Then

Response.Write Err.Description

End If

%>




Functions.asp:

<%

Option Explicit



Dim configPath, Page_URL_Dict

configPath = Server.MapPath("./conf/app-conf.xml")

Set Page_URL_Dict = Server.CreateObject("Scripting.Dictionary")

‘根据pageName取得页面地址

Function GetPage(pageName)



If Page_URL_Dict.Count = 0 Then

ReadPageURLToDict

End If



GetPage = Page_URL_Dict(pageName)

End Function



‘初始化pageName-pageURL对照字典

Function ReadPageURLToDict()

On Error Resume Next

Page_URL_Dict.RemoveAll

Dim logNode, xmlDom, root



Set xmlDom = Server.CreateObject("Microsoft.XMLDOM")

xmlDom.async = False

xmlDom.load(configPath)



Set root = xmldom.selectSingleNode("//url-mappings")

For Each logNode In root.childNodes

Page_URL_Dict.Add logNode.childNodes(0).text, logNode.childNodes(1).text

Next



Set xmlDom = Nothing



If Err.Number <> 0 Then

Response.Write Err.Source & "<br>"

Response.Write Err.Description & "<br>"

End If

End Function

%>




app-conf.xml

<?xml version="1.0"?>

<app-conf>

<url-mappings>

<url-mapping>

<page-name>pgHome</page-name>

<page-url>Page2.asp</page-url>

</url-mapping>

<url-mapping>

<page-name>pgShowNews</page-name>

<page-url>shownews-1_0.asp</page-url>

</url-mapping>

<url-mapping>

<page-name>pgHtml</page-name>

<page-url>1.html</page-url>

</url-mapping>

</url-mappings>

</app-conf>




3 实践与问题

在浏览器中输入http://localhost:12345/default.asp?pg=pgHome

http://localhost:12345/default.asp?pg=pgShowNews 看出各个较大不同的页面之间地址都相同,没有明显转向的感觉。我在一个页面作了遍历Request.Form, Request.QueryString的测试,都能够取得相应的值。

问题:

要转向的页面如果处在其他目录下,并且如果在该页面中有对../上级目录或其他目录的引用(如样式表,图片等),则显示不出来。我想这可能是Server.Transfer实际是将整个文件包含到当前路径来执行。这样图片、样式等的显示就会有问题了。也就是说,如果想应用这种方法在整个系统中,则需要将所有的页面文件(asp, html)置于与default.asp(或者其他控制转向的文件)同一文件夹下。这或多或少是个限制。



4 优点:

利用这种方式最直接的优点就是将链接与文件名隔开。你不需要费尽心思的想该怎么取一个文件名,也不需要花气力去检查链接地址的正确性。只要在xml文件中将pageName与pageURL进行映射就行了。

第二个优点是安全,用户无法知道你真正的URL地址。你也可以在default.asp中加入一些控制,使得直接访问xxx.asp的用户被转入到一个出错页面。

第三个优点是易于管理。通过将文件名―文件路径进行映射,你能够更加清楚整个项目的流程。如果你愿意,你可以将页面所带的参数也进行标准化。这样,对于ASP项目也能够规范化了,例如,一个典型的页面地址:

http://etoow.com/default.asp?pg=pgNewsList&command=List&sp=1&sp=abc

通过将页面名称、参数的规范化,使得程序员可以更加清楚的编写整个页面。项目管理者可以通过掌握整个xml的配置文件(当然,参数信息、页面描述等也应当记录在这个文件中)可以迅速把握整个项目的脉络。这也在一定程度上控制了随意添加文件的问题。
-= 资 源 教 程 =-
文 章 搜 索
关键词:
类型:
范围:
纯粹空间 softpure.com
Copyright © 2006-2008 暖阳制作 版权所有
QQ: 15242663 (拒绝闲聊)  Email: faisun@sina.com
 纯粹空间 - 韩国酷站|酷站欣赏|教程大全|资源下载|免费博客|美女壁纸|设计素材|技术论坛   Valid XHTML 1.0 Transitional
百度搜索 谷歌搜索 Alexa搜索 | 粤ICP备19116064号-1