ASP常见问题解答
ASP常见问题解答
问:如何保护自己的ASP源代码不泄露?
答:下载微软的Windows Script Encoder,对ASP的脚本和客户端JavaScript、VBScript脚本进行加密。客户端脚本加密后,只有IE
5以上的版本才能执行,服务器端脚本加密后,只有服务器上安装有Script Engine 5(安装IE 5即可)才能解释执行。
问:为什么global.asa文件总是不起作用?
答:只有把global.asa文件放在Web发布目录某个站点的根目录下它才有效,放在发布目录的某个子目录下不起作用。另外,也可以使用IIS
4的Internet Service Manager把某个子目录设置为站点。
问:为什么ASP文件总不解释执行?
答:在IIS服务器上没有给ASP文件以脚本解释的权限,所以ASP文件没有被Web服务器作为脚本代码进行解释执行,而被当成一般页面文件了。建议在Web发布目录中建立一个ASP目录,把所有ASP文件存放在此目录下,把ASP目录赋予脚本解释权限。
问:ASP文件中使用response.redirect(URL)时导致错误“the http headers are already written
to the client browser. any http header modifications must be made before
writing page content”,请问如何解决?
答:此错误为http标题在写入页内容之后,写到了客户浏览器中。任何http标题的修改必须在写入页内容之前进行,解决的方法为在ASP文件最开头加入response.buffer
= true,在文件的结尾加入response.flush。
问:为什么Session有时候会消失?
答:Session很像临时的Cookie,只是其信息保存在服务器上,客户机上保存的是Sessionid。Session变量消失有几种可能,如:使用者的浏览器不接受Cookie,因为Session依赖于Cookie才能跟踪用户,Session在一段时间后过期了,缺省为20分钟。如果希望更改,可以通过设置Microsoft
Management Console的“Web directory→properties→virtual directory→application
settings→configuration→app options→session timeout”选项来改变Session的超时时间,也可以在ASP脚本中设定,如session.timeout=60,可设定超时时间为60分钟。
问:怎样才能知道访问者的一些信息?
答:通过request.servervariables("http-user-agent")获得访问者浏览器的类型;request.servervariables("remote-addr")可获得访问者的IP地址;而访问者的语言环境可通过request.server
variables("http-accept-language")来获得。
问:怎样才能将query string从一个ASP文件传送到另一个ASP文件?
答:前一个ASP文件加入下列代码:response.redirect ("second.ASP?" & request.servervariables("query-string"))即可。
问:ASP中如何控制Cookies?
答:若想写入Cookies可用:response.cookies(“待写入的coookies名称”)=待写入数据。读取Cookies则使用:读取数据=request.cookies("待读的cookies名称")。
注意,写入Cookies的response.cookies程序段必须放在〈html〉标记之前,且不可以有任何的其它HTML代码。另外,Cookies中必须使用Expires设定有效期,Cookies才能真正地写入客户端硬盘中,否则只是临时的。
问:怎样实现用ASP发送邮件?
答:用户需装上Windows NT option pack的Smtp service功能。实现代码如下:
〈%
set mail = server.createobject("cdonts.newmail ")
mail.to = "abc@xxx.com"
mail.from = "yourmail@xxx.com"
mail.subject = "主题 "
mail.body = "e-mail内容"
mail.send
%〉
问:ASP与数据库连接一定要在服务器端设置DSN吗?
答:不一定,ASP与服务器的数据库连接有两种方法,一种为通过DSN建立连接,另一种不用DSN建立连接。通过DSN连接数据库需要服务器的系统管理员在服务器的控制面板中的ODBC中设置一个DSN。如果没有在服务器上设置DSN,只要知道数据库文件名(比如Access、Paradox、Foxpro的数据库)或者数据源名(如SQL数据库)就可以访问数据库,直接提供连接所需的参数即可。
连接代码如下:
set conn=server.createobject("adodb.connection")
connpath="dbq=" &server.mappath("yourtable.mdb")
conn.open"driver={microsoft access driver (.mdb)}; " & connpath
set rs=conn.execute("select from authors")
问:如何从一页到另一页传递变量?
答:用hidden表单类型来传递变量。
〈 form method="post" action="mynextpage.ASP "〉
〈% for each item in request.form %〉
〈input namee="〈%=item%〉" type="hidden"
value= "〈%=server.htmlencode(request.form(item)) %〉"〉
〈% next %〉
〈/form〉
用session来保存变量。
〈%session("bh")= request.form ("bh")%〉
用querystring保存变量。
〈a herf="action.ASP?bh=10"〉查询〈/a〉
〈%request. querystring ("bh")%〉
问:如何用ASP实现在线人数统计?
答:在线人数是指一个时段内的访客人数统计,时间的长短是由设计者设定的。
在这个时段内,各个不同IP访问本站点的总数,就是当前的线上人数。在ASP中,使用Session对象来实现统计,实现代码如下:
golobal.asa文件:
〈script language="vbscript" runat="server"〉
sub session-onstart
application( "online")=application( "online ")+1
end sub
sub session-onend
application( "online")=application( "online ")-1
end sub
sub application-onstard
application( "online ")=0
end sub
sub application-onend
application( "online ")=0
end sub
〈/script〉
online.ASP文件内容:
〈% tmp=application( "online ")
tmp=cstr(tmp)
dim disp(20)
dim images(20)
dbbits=len(tmp)
for i= 1 to dbbits
disp(i)=left(right(tmp,i),i-(i-1))
next
for i=dbbits to 1 step -1
images(i)= "〈img src= "& "http://xxxx.com.cn/pic "&
"/ "&disp(i)& ".gif〉 "
response.write "document.write(′ "&images(i)& " ′); "
next %〉
问:ASP程序运行的时间如何计算?
答:确定ASP程序的执行时间的代码如下所示:
〈%
dim t1,t2
t1=now()
′被检测的ASP代码
t2=now()
response.write "运行这段ASP代码用了 "&cstr(cdbl((t2-t1)*24*60*60)) &
"秒"
%〉
(林子)