|
|
|
|
你现在的位置:您现在的位置是: 中国ASP>>ASP教程>>ASP对象 |
|
| include:服务器端包含 |
|
不可思议的ASP #include指令
在一个ASP页中,可以使用#include指令把另一个文件的内容插入到当前的页面中: <!-- #include file="/scripts/usefulbits.inc" --> 这条指令读取该文件的全部内容并插入到该页中,替代<!-- #include.. -->行。这是一种非常有用的插入HTML段落的技术,可反复使用。也常用该指令来插入代码段。例如,如果有一个包含几个脚本函数(或者只是单行脚本代码)的文件同时在几个页面中使用,则可以使用#include指令将其插入到需要它的每个页中。 通过把脚本和内容分开的方法,给页面提供了一个组成层次。这意味着如果对脚本进行了修改,在客户端再次打开该页面时,脚本的修改情况自动地反映到使用包含文件的每个页面中。包含文件也是一种插入服务器特定的信息的简单方法,所以把站点转移到另一个服务器不意味着必须编辑涉及原来服务器的所有页面(明显的例子是数据库连接字符串或指定一个完整的URL或服务器名字的链接)。这可以极大地减少维护费用。 例如,可以把下面的内容作为一个包含文件,命名为connect.inc: <% strConnect = “SERVER=myserver;DATABASE=mydb;DRIVER={SQL Server};"& “UID=username;PWD=secretpassword" %> 然后可以在任何页中使用这个文件: <!-- #include file="path_to_file\connect.inc" --> <% … strTheConnectionString = strConnect ''''From include file … %> 使用包含文件的另一种情况是有些内容需要按指定的时间间隔进行修改。 这个技术大大减少了在Web服务器和数据库服务器上的工作量,对该站点的访问者实现较快地响应。
1. 包含文件和ASP 在ASP网页(即带有.asp文件扩展名的网页)中使用的#include指令不能像一条真正的SSI指令那样进行处理,它仅是一条ASP能够识别并进行语法分析的特别指令。ssinc.dll直接用于执行SSI #include指令。然而这个由相应文件的内容替代#include指令的页面由ASP解释。 这意味着ASP对#include指令所进行的操作不实施控制。例如,可以试验以下代码: <% ''''This will *not* work strIncludeURL = Request.Form("FileName") %> … <!-- #include file="<% = strIncludeURL %>" --> ssinc.dll将查找名为<% = strIncludeURL %>的文件,并且不可能找到,因此这段代码不会工作。
2. 包含文件的安全性 如果没有包含可执行脚本,在Web服务器上的ASP网页不能通过IIS的Web服务程序下载到一个客户端。 包含文件的扩展各一般是.inc或.txt。如果在站点上发现一个包含文件的路径和文件名,可通过把包含文件的URL键入到浏览器的地址栏中,下载该包含文件,而不会把其作为ASP网页的一部分来执行。为防止出现这样情况,特别是在文件包含有敏感信息(诸如一个数据库链接字符串)的情况下,可能希望包含文件的扩展名为.asp。在这种情况下,如果试图下载一个包含文件,它将首先被传送到ASP,ASP将执行该文件中的所有脚本代码,并只发送出结果。如在包含文件中定义的一个链接字符串如下: <% strConnect = “SERVER=myserver;DATABASE=mydb;DRIVER={SQL Server};" _ & "UID=username;PWD=secretpassword” Response.Write vbCrlf "Output a carriage return character %> 客户端只能接受到单个回车符而不是脚本代码,因为该文件已经被ASP在服务器上执行了。如果不包含回车符,浏览器将挂起并等待一个响应(这并不是我们的问题,因为我们确实不打算允许用户直接访问这个文件)。 我们还可以在iis上指定inc文件的映射方式来解决代码可能被下载的危险。
|
|
|