ASP全程攻略一
作者:TTXS(Fcbu.Com)
来源:互联网
发表时间:2006-06-23
(一):安装服务器
鉴于ASP脚本语言是在服务器端IIS或PWS中解释和运行,并可动态生成普通的HTML网页,然后再传送到客户端供浏览的这一特点。我们要在本机上进行调试,那就要求我们的个人电脑具有服务器的功能。
不要看到“服务器”三个字就感到担心:我的机子配置这么低,性能这么差,是不是不能配啊。放心!配个服务器,就是多装个软件,况且就自己一个人用,根本没有必要多虑。那具体的装个什么软件呢?刚才我们也看到了是在“IIS或PWS中解释和运行”,很明显,装IIS或者PWS就可以了。
IIS为何物?IIS是Internet Information Server的缩写,它是微软公司主推的Web服务器。那PWS呢?它就显得有些古老了:)早期在WIN98,当然现在仍有人采用的操作系统,PWS(Personal Web Server)是一般用户最容易得到的web服务器: 在win98的安装盘的Add_onpws目录下就可以找到pws的安装程序。而对于IIS是我们所推荐的,也是大部分朋友在使用的,有必要。
1,打开控制面板
2,在控制面板中选择“添加/删除Windows组件”,打开窗口
[UploadFile=2_1100048379.jpg]
3,点击“添加/删除Windows组件”后稍等片刻。出现“Windows组件向导”窗口。从中打勾“选择Internet信息服务(IIS)”
[UploadFile=3_1100048446.jpg]
4,在“Windows组件向导”中单击“下一步”。开始安装配置我们的服务器IIS。
[UploadFile=4_1100048542.jpg]
5,等待进度条跑到终点。。。终于复制文件全部完成,配置服务器也相应的结束。
[UploadFile=5_1100051025.jpg]
6,IIS服务器算是安装OK了,那具体有什么用处?又该如何使用呢?
首先IIS的作用之一就是可以解释执行ASP网页代码,并将结果显示出来。当然就现在而言,你的机器充当的既是服务器端,又是客户端,该技术对你来说是透明的,你不需要也没必要去研究它的原理,就这样去理解去应用。
那打开你的浏览器,随便IE,NS,TE还是MYIE,只要是能浏览网页的浏览器,在其地址栏输入:http://http://www.zjjv.com//">
</form>
<script>
alert("隐藏域的值是 " document.form1.yourhiddeninfo.value)
</script>
5,type=button
标准的一windows风格的按钮,当然要让按钮跳转到某个页面上还需要加入写javascript代码
<form name="form1">
your button:
<input type="button" name="yourhiddeninfo" value="Go,Go,Go!" onclick="window.open(';http://http://www.zjjv.com//bruce.com';)">
</form>
6,type=checkbox
多选框,常见于注册时选择爱好、性格、等信息。参数有name,value及特别参数checked(表示默认选择)
其实最重要的还是value值,提交到处理页的也就是value。(附:name值可以不一样,但不推荐。)
<form name="form1">
a:<input type="checkbox" name="checkit" value="a" checked><br>
b:<input type="checkbox" name="checkit" value="b"><br>
c:<input type="checkbox" name="checkit" value="c"><br>
</form>
name值可以不一样,但不推荐<br>
<form name="form1">
a:<input type="checkbox" name="checkit1" value="a" checked><br>
b:<input type="checkbox" name="checkit2" value="b"><br>
c:<input type="checkbox" name="checkit3" value="c"><br>
</form>
7,type=radio
即单选框,出现在多选一的页面设定中。参数同样有name,value及特别参数checked.
不同于checkbox的是,name值一定要相同,否则就不能多选一。当然提交到处理页的也还是value值。
<form name="form1">
a:<input type="radio" name="checkit" value="a" checked><br>
b:<input type="radio" name="checkit" value="b"><br>
c:<input type="radio" name="checkit" value="c"><br>
</form>
下面是name值不同的一个例子,就不能实现多选一的效果了<br>
<form name="form1">
a:<input type="radio" name="checkit1" value="a" checked><br>
b:<input type="radio" name="checkit2" value="b"><br>
c:<input type="radio" name="checkit3" value="c"><br>
</form>
8,type=image
比较另类的一个,自己看看效果吧,可以作为提交式图片
<form name="form1" action="xxx.asp">
your Imgsubmit:
<input type="image" src="/images/logo.gif">
</form>
9,type=submit and type=reset
分别是“提交”和“重置”两按钮
submit主要功能是将Form中所有内容进行提交action页处理,reset则起个快速清空所有填写内容的功能。
<form name="form1" action="xxx.asp">
<input type="text" name="yourname">
<input type="submit"value="提交">
<input type="reset"value="重置">
</form>
Input的Type总结下来有10个,还是不少的,呵呵
三,接着再来看Select相关
Select主要要来做下拉菜单,跳转菜单,(下拉)列表。
其本身有内嵌代码<option>...</option>,option参数value值为传递被处理的值,option还有参数selected,表示默认被选中的。
1,下拉菜单
只是菜单式显示。
<form name="form1">
<select name="selectwhat">
<option value="a">aaa</option>
<option value="b">bbb</option>
<option value="c" selected>ccc</option>
</select>
</form>
<script>
alert("菜单的默认选取值是 " document.form1.selectwhat.value)
</script>
2,跳转菜单
在下拉菜单基础上添加javascript成为跳转菜单。
<select onChange="if(this.selectedIndex && this.selectedIndex!=0){window.open(this.value);}this.selectedIndex=0;">
<optionselected>网站连接……</option>
<optionvalue="http://http://www.zjjv.com//bruce.com/">Cn-Bruce</option>
<optionvalue="http://http://www.zjjv.com///">Blue!dea</option>
<optionvalue="http://http://www.zjjv.com///">It365cn</option>
</seclect>
3,下拉列表
和下拉菜单最大的区别就是select多了一个size值,该值并非长度大小,而是列表的上下高度。
当然还有更主要的是:菜单只能选一个,而列表可以选多个,该特殊参数为multiple
size=1简直就是一个下拉菜单
<form name="form1">
<select name="selectwhat" size=1>
<option value="a">aaa</option>
<option value="b">bbb</option>
<option value="c">ccc</option>
</select>
</form><br>
size>1你会发现了大不同
<form name="form1">
<select name="selectwhat" size=3>
<option value="a">aaa</option>
<option value="b">bbb</option>
<option value="c">ccc</option>
</select>
</form><br>
加入了multiple发现可以多个选择了,包括Shift进行快速全选及Ctrl进行点选
<form name="form1">
<select name="selectwhat" size=3 multiple>
<option value="a">aaa</option>
<option value="b">bbb</option>
<option value="c">ccc</option>
</select>
</form><br>
四,最后关注的Textarea
可以将Textarea文本区域理解为扩大化了的文本输入框。
其参数没有value,默认值设定在<textarea>...</textarea>之间。
其它参数还有rows,表示文本区域的行数;参数cols,表示文本区域的列数。
还有参数warp,当warp=off表示该文本区域中的不自动换行,当然不写默认是自动换行的。
<form name="form1">
<textarea name="textinit" rows="5" cols="20" wrap="off">5行20列,不自动换行</textarea>
</form>
最后总结:input根据type分10类,select从option处又分菜单和列表,textarea有行有列的文本输入区域。
(三):接触脚本程序
有了前面的html中关于form的强化知识,是不是在想,下面就可以开始ASP之旅呢?未必。
一般系统学过ASP的编程人员都会切身体会到:在系统学习ASP的内置对象和内置组件之前,学会脚本语言永远是至关重要的。
为什么这么说呢?为什么要学脚本语言呢?ASP和脚本语言又有什么关系呢?
首先说说ASP是贵为何物吧。ASP是Microsoft Active Server Pages的简称,它是一种服务器端脚本环境,可用来创建交互式 Web 页并建立强大的 Web 应用程序。可以表明ASP是一种基于服务器端的脚本环境,那就明白ASP为什么需要IIS支持了,因为IIS即为常用的一类web服务器;那也就明白为什么要学脚本语言了,因为ASP提供的是一种脚本环境。
再次需要说明的是,ASP只是一种环境,而非一种语言。如果真要形象化地说是ASP是网络编程语言的话,那也是属于一个html 脚本 asp提供的内置对象及组件的功能强大的混合语言。
所以,学点脚本非常重要!其实无论是学脚本语言,还是其它语言,我认为首先需要了解的是该语言涵盖的各类特性,包括:数据类型、事件、方法、 对象、属性、语法等当然这都是些空谈,正如在大学课堂上的某计算机语言课一样,搞纯研究性的就是觉得有些索而无味。还是实用些的好,能解决问题的程序才是好程序(印证能逮到老鼠的猫就是好猫的经典圣语,呵呵)
当然,语言这东西还是要你去好好钻研的,比如你写求绝对值的程序,其实一个abs()函数就搞定了。再比如你会vb脚本,但把同样程序替换成java脚本就会出错,它们的数据类型不同,语句语法也不一样啊。正如说中文和外文一样,要会发音标(数据类型),会如何发音(方法),如何说成一句话(语法)……呵呵,有点让你难受吧。行!直接了当。你以后需要注意的是语言的函数、语法。当然也不是让你全看,按照教程中的遇到一个掌握一个。教程学完,差不多也结束了。呵呵,你要相信我。
目前有两种主要的脚本语言:VbScript和javascript。因为VbScript作为IIS默认的服务器脚本,所以我们所谈所学的基本是围绕VbScript为脚本的ASP的,当然也不排除有的时候使用javascript.
举一个很简单的例子:
<script language="vbscript">
<!--
sub button1_onclick
msgbox (" 欢迎使用vbscript! " )
end sub
-->
</script>
<script language="javascript">
<!--
function b213()
{
alert("欢迎使用javascript!")
}
-->
</script>
<form>
<input type="button" name="button1" value="vbs"><br>
<input type="button" name="button2" value="js" onclick="b213()">
</form>
vbscript中的Sub 就是一个事件过程。过程名包含两部分:一部分为按钮名,即 Button1(从 < INPUT > 标记中的 NAME 属性获取);另一部分为事件名,即 onClick。两部分由下划线 (_) 连接。单击按钮时,Internet Explorer 查找并运行相应的事件过程,即 Button1_onClick,而MsgBox 就是一个函数,对于它更具体的参数,你就好好看下了。
一时来劲,可能大家都看到网上有种狂恶心的对话框组,原理是什么呢?请看:
<script language="vbscript">
msgbox"你知道你会点确定的。。。。。。。"
msgbox"不点也要点。。。。。。。。"
msgbox"没办法是吧。。。。。。。。。。?"
msgbox"要不网页打不开啊。。。。。。"
msgbox"这招损人吧。。。。。。。。。"
msgbox"真想揍揍站长。。。。。。。。。"
</script>
其实站长用这些玩弄别人的时候,先玩弄了自己:因为这都是他想出来的啊:)
呵呵,我没有损大家的意思,只是为了学习。
再来个开页和退页弹出对话框的原理吧
<script language="vbscript">
<!--
sub window_onload()
msgbox"welcome you!"
end sub
sub window_onunload()
msgbox"see you late!"
end sub
-->
</script>
开页显示“welcome you!”,关页显示“see you late!”
以上只是一个显示对话框msgbox,当然还有书写对话框inputbox也顺便看下吧。
<script language="vbscript">
<!--
dim strname
strname=inputbox("enter your name please:","enter your name","cnbruce")
document.write(strname&",welcome you!<p>")
-->
</script>
有关inputbox的想关参数也去看看吧。
再来看看几个实用的函数:
len():返回字符串长度或者变量的字节长度
lef():截取一个字符串的前部分内容
right():截取一个字符串的后部分内容
<script language=vbs>
text="1234567890abcdefgh"
i=10
lentext=len(text)
lefttext=left(text,i)
righttext=right(text,i)
alert ("文本长度是:"&lentext)
alert ("文本左取"&i&" 得的是:"&lefttext)
alert ("文本右取"&i&" 得的是:"&righttext)
</script>
根据这几个,经常看到的长文章后面加“......”的情况就是如下:
<script language=vbs>
text="123 4567 8fds90 abcde fghxcfv"
i=10
if len(text)>i then ';如果文本长度大于给定的值
text=left(text,i) ';则提取前段的i位的字符串
alert (text&"...")
else
alert (text)
end if
</script>
还有个比较重要的函数replace()
在字符串中查找,替代指定的字符串
replace(strtobesearched,strsearchfor,strreplacewith)
strtobesearched是字符串; strsearchfor是被查找的子字符串;strreplacewith 是用来替代的子字符串。
下面的一个就是很有用的文字转换程序
<script language=vbs>
text="妈的,我操"
text=replace(text,"妈的","MD")
text=replace(text,"操","CAO")
alert (text)
</script>
经常在发送EMAIL时,添加多个地址,中间采用“;”号进行分隔,那具体怎么分解接受过来的多个EMAIL地址呢?采用Split函数:Split 函数从字符串中返回数组。
<script language=vbs>
cnbruce="cnbruce@126.com;cnbruce@it365cn.com;root@cnbruce.com"
MyArray = Split(cnbruce, ";")
a=MyArray(0)
b=MyArray(1)
c=MyArray(2)
alert(a)
alert(b)
alert(c)
</script>
这些都是比较现实较好玩的些,玩中学习也不错:)但毕竟我们是要编程的,说到编写程序,我知道程序结构可以分:
1,顺序结构:就是最普通的,从上往下,从左往右执行的程序
2,选择结构:给你两个条件,要不这样(if ... then),要不那样(else),任君选择:)
3,循环结构:给你一个最大发挥的空间,在不超出这个范围内进行活动(循环),否则自动退出(跳出循环)。
再复杂的程序也无非是由这三种结构综合嵌套运用过来的,你说是吧。
顺序结构没多少要说,因为程序执行基本都是这方向。
来看看选择结构,当然选择结构也可以嵌套。
<body>
hello,
<script language="vbscript">
<!--
dim thishour
thishour=hour(time)
if thishour<=12 then
document.bgcolor="red"
document.fgcolor="black"
document.write("上午好!")
else
if thishour<=18 then
document.bgcolor="blue"
document.fgcolor="white"
document.write("下午好!")
else
document.bgcolor="green"
document.fgcolor="yellow"
document.write("晚上好!")
end if
end if
-->
</script>
本页的作用是根据不同时间显示不同颜色和欢迎信息。
</body>
以上程序很简单吧,只要能认识英文就会懂程序(我是这么理解的:)
先把现在的小时提交出来:hour(time);
然后和12比较判断,如果<=12,肯定是上午了,否则就是下午和晚上;
否则里面继续条件判断,如果时间再<=18的话,那肯定就是下午了;
最后,不用说,瞎子猜猜也知道是晚上了:)
有关上一程序中的document.bgcolor就是文档的背景色,document.fgcolor就是文档的前景色(文字色),下一程序是动态改变背景颜色的。
<script language="vbscript">
<!--
sub setbgcolor(bcolor)
document.bgcolor=bcolor
end sub
-->
</script>
<form>
<input type="radio" name="color" onclick=setbgcolor("red")>red<br>
<input type="radio" name="color" onclick=setbgcolor("green")>green<br>
<input type="radio" name="color" onclick=setbgcolor("blue")>blue<br>
<input type="radio" name="color" onclick=setbgcolor("yellow")>yellow<br>
<input type="radio" name="color" onclick=setbgcolor("gray")>gray<br>
</form>
有关条件选择结构的嵌套再show出一个表单检测的程序
<html><head><title>abc</title>
<script language="vbscript">
<!--
sub btnsubmit_onclick
if form1.name.value<>"" then
if form1.addr.value<>"" then
if form1.email.value<>"" then
if instr(form1.email.value,"@")<>0 and instr(form1.email.value,".")<>0 then
form1.submit
else
alert"email error!"
end if
else
alert "enter your email!"
form1.elements("email").focus
end if
else
alert "enter your address!"
form1.elements("addr").focus
end if
else
msgbox "enter your name please!"
form1.elements("name").focus
end if
end sub
-->
</script>
</head>
<body>
<form name="form1" method=post action="bug.html">
your name:<input type="text" name="name"><br>
your addr:<input type="text" name="addr"><br>
your email:<input type="text" name="email"><br>
<input type="button" name="btnsubmit" value="submit">
</form>
</body>
</html>
程序是给出来了,但看起来比较难懂,有时程序执行时间也比较重要,所以得精简程序代码。
正所谓:写程序容易,写经典程序难啊,那上面的程序还可以换种思维方式。改用javascript(注:学的是编程思想,不要太过计较脚本类型)
<html><head><title>abc</title>
<script language="javascript">
<!--
function form1_onsubmit()
{
if (document.form1.name.value=="")
{
alert("请设定您的登陆名。")
document.form1.name.focus()
return false
}
else if(document.form1.addr.value=="")
{
alert("请填写您的地址。")
document.form1.addr.focus()
return false
}
else if(document.form1.email.value=="")
{
alert("请填写您的E-Mail地址。")
document.form1.email.focus()
return false
}
}
-->
</script>
</head>
<body>
<form name="form1" onsubmit="return form1_onsubmit()">
your name:<input type="text" name="name"><br>
your addr:<input type="text" name="addr"><br>
your email:<input type="text" name="email"><br>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
最后来看下循环结构吧:1到500可不是一个一个写出来的。
<scriptlanguage=vbs>
fori=1to500
document.write(i&"<br>")
next
</script>
当然循环不只可以用for,还可以用do while...loop等
反正程序这东西是代替我们少做了许多重复单一无聊的事——只要你合理利用程序。
应该有些成就吧,学语言,学编程就是学语法语义,学编程架构思想。
当然这要你有扎实的本语言的基础,基础是什么?你知道哪些函数吗?你知道怎么用程序怎么判断偶数吗(包含了运算)?你知道如何进行表单检测吗?你知道哪三种程序架构吗?
函数参看:
http://http://www.zjjv.com//bruce.com/blog/showlog.asp?cat_id=26&log_id=245
呵呵,把以上的程序吃透,最好再多看看脚本参考手册,跟我就可以开始ASP的上路了。
(四):内置对象Request
系统学习ASP,就是先从ASP的几大内置对象开始的.
一般称五大对象:Request、Response、Server、Session、Application
今天先来看看Request对象。
当然一直还没有提到的就是,ASP到底是什么样?我看代码怎么知道是ASP代码?
很简单,当看到“<%”和“%>”就表明是ASP,并且两者之间的就是ASP源码。
那为什么要学对象,对象的作用又是如何的?
其实ASP所提供的这些可在脚本中使用的内建对象,使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息,从而使对象开发者摆脱了很多烦琐的工作。
而Request对象的主要作用就是:在服务器端接受并得到从客户端浏览器提交或上传的信息。Request 对象可以访问任何基于 HTTP 请求传递的所有信息,包括从Form表单用 POST 方法或 GET 方法传递的参数、cookie 等。
一,Request.form("name")
这是接受上一页的信息时,常会用到的一种接受方式。Request是ASP对象,form则是Request对象所包含的对象集合(这要有区别与HTML页中的form表单,是不一样的),name也就是上一页表单中的某个文本框、密码框,或者隐藏域等的名称。并且还有一点非常重要:上一页Form表单的递交方法一定要为Post方法。
说不如做,看下面两个页面程序。
1,test1.html(本页是HTML的,主要提供输入信息的平台,以将信息提交到再下面的ASP页进行接受处理)
<form action="submit1.asp" method="post">
your name:<input tpye="text"name="yourname"><br>
your pwd: <input type="password" name="yourpwd"><br>
<input type="submit" value="submit">
</form>
2,submit1.asp(ASP页面,进行从test1.html接受name="yourname"和name="yourpwd"的两个值)
your name is:<%=request.form("yourname")%><br>
your pwd is:<%=request.form("yourpwd")%>
通过IIS进行HTTP协议的页面调试,你会发现两个页面进行了关联:test1.html中动态输入的name和pwd,在submit1.asp也则进行相应的动态显示。
这就是接收、提取并显示信息的全过程。
3,改进的submit1.asp
<% for each i in request.form%>
<%=i%>:
<%=request.form(i)%>
<br>
<%next%>
采用了for循环语句,将上页所有的form标签信息进行接受、并显示。这在上表单页有很多项目时,非常快捷地出来结果。
首先仍然是request.form,只是后面的("yourname")或("yourpwd")变成了变量 i
通过for循环对该form集合进行遍历提取,这是一种不同于机械地“有几个就提取几个”的编程思想,注意掌握。
二,Request.querystring("name")
此时由Request.form变为Request.querystring,最主要的还是上页表单递交时,采用的什么方法。当采用post就用Request.form,否则当采用get时就采用Request.querystring了。
那Request.querystring最大特色在哪里呢?Request.querystring能检索并接受 HTTP 查询字符串中变量的值,而HTTP 查询字符串则是由问号 (?) 后的值指定的。说了大半天,继续看一个程序。
1,test2.html(本页同是HTML的,主要提供输入信息的平台,以将信息提交到再下面的ASP页进行接受处理,注意提交方法是get)
<form action="submit2.asp" method="get">
your name:<input tpye="text"name="yourname"><br>
your pwd: <input type="password" name="yourpwd"><br>
<input type="submit" value="submit">
</form>
和test1.html最大区别也就是method="get"
2,submit2.asp(ASP页面,进行从test1.html接受name="yourname"和name="yourpwd"的两个值)
your name is:<%=request.querystring("yourname")%><br>
your pwd is:<%=request.querystring("yourpwd")%>
注意此时的浏览器地址栏,文件后面多出了?号,?号后面附有变量名及所被赋的值,当然多个变量名之间是用&号进行连接的。
而Request.querystring最大的功能就是能将?号后面的这些变量名分开,并且所对应的值也一一取出。
刚才说到不同的变量名之间是用&号进行连接,但如果是相同的变量名时,request.querystring到底是提取前一个?后一个?还是两个一起?
用例子说话。
3,query.asp(名称是query.asp,因为在该页程序中是反馈给自己。)
<a href="query.asp?bookname=《asp教程》">《asp教程》</a><br>
<a href="query.asp?bookname=《jsp教程》">《jsp教程》</a><br>
<a href="query.asp?bookname=《xsp教程》&bookname=《xml》">《xsp教程》</a><br>
you chosed <%=request.querystring("bookname")%>
很明显当点《xsp教程》时,显示的是“《xsp教程》,《xml》”,中间自动加了“,”号。
最后仍需要说明的是:request.querystring在分页程序里面是经常用到的。象http://http://www.zjjv.com//bruce.com/database/
三,Request.ServerVariables("xxx")
其中ServerVariables就是服务器的环境变量了,该变量包含的内容比较多,我们同样先采用for循环进行遍历查看下。
1,server1.asp
<%for each i in request.servervariables%>
<%=i%>:
<%=request.servervariables(i)%>
<hr>
<%Next%>
可以看到一大堆环境变量,其中还有没有值的,下面摘取几个比较常用的。
http_user_agent(客户端机器的相关环境):<%=request.servervariables("http_user_agent")%><br>
http_accept_language(浏览语言):<%=request.servervariables("http_accept_language")%><br>
CONTENT_LENGTH(客户端发出内容的长度):<%=request.servervariables("CONTENT_LENGTH")%><br>
CONTENT_TYPE(内容的数据类型。如“text/html”。同附加信息 的查询一起使用,如 HTTP 查询 GET、POST 和 PUT):<%=request.servervariables("CONTENT_TYPE")%><br>
LOCAL_ADDR(返回接受请求的服务器地址。如果在绑定多个IP地址的多宿主机器上查找请求所使用的地址时,这条变量非常重要):<%=request.servervariables("LOCAL_ADDR")%><br>
REMOTE_ADDR(发出请求的远程主机client的 IP 地址):<%=request.servervariables("REMOTE_ADDR")%><br>
SERVER_NAME(出现在自引用 URL 中的服务器主机名、DNS 化名 或 IP 地址):<%=request.servervariables("SERVER_NAME")%><br>
SCRIPT_NAME(主机名后面的虚拟地址):<%=request.servervariables("SCRIPT_NAME")%><br>
LOGON_USER(用户登录 Windows NT 的帐号):<%=request.servervariables("LOGON_USER")%><br>
SERVER_PORT(发送请求的端口号):<%=request.servervariables("SERVER_PORT")%>
根据以上的SERVER_NAME是提取的服务器主机名,SCRIPT_NAME是提取的虚拟地址,则两者的结合再加上http://是不是就是个完整的网址呢。
2,server2.asp
<%a=request.servervariables("server_name")%>
<%b=request.servervariables("script_name")%>
<%="http://"&a&b%>
其中http://用引号引起,表示是一字符串,a和b分别是对应了具体值的变量,在ASP中进行这样的连接就是采用&号。
根据这个结果,我们是不是就可以随时提取动态的URL地址了。
再来看看query.asp,要求一定要保存为query.asp的,因为如果不是该文件名,程序指向就会出错。
但现在的这个文件就随便你保存为什么文件,都一样执行。
3,xxx.asp(随便你保存成什么文件)
<%filepath=request.servervariables("script_name")%>
<a href="<%=filepath%>?bookname=《asp教程》">《asp教程》</a><br>
<a href="<%=filepath%>?bookname=《jsp教程》">《jsp教程》</a><br>
<a href="<%=filepath%>?bookname=《xsp教程》&bookname=《xml》">《xsp教程》</a><br>
you chosed <%=request.querystring("bookname")%>
先将当前文件的地址取出并赋值给变量filepath
然后所有的链接地址开头都只要直接引用该变量就OK了。
是不是很有用,有点万能的感觉。
四,Request.Cookies("name")
不用我说,Cookie是个很重要的东西,究竟如何,等我们学完了下面的对象Response后,会有个特别Cookie的专题讲座。
就先搁着吧。
以上四则运用,属于Request对象的所包含的四个对象集合:form、querystring、servervarivables、cookies。当然还有个ClientCertificate就不说啦
一个ASP内置对象除了对象集合外还有对象属性、对象方法
Request对象的对象属性只有一个就是TotalBytes(接受的字节数),你可将
<%=request.totalbytes%>
该语句加入到任何一个接受数据的ASP页面中进行显示了。
Request对象的对象方法也还是一个:BinaryRead 。
说实话,这东东不常用,我也没用过,呵呵。
OK~!有关Request对象的学习就差不多了,最主要是先好好理解三个对象集合,cookies不着急,下节继续学习对象Response。
(五):内置对象Response
通过对Request对象的学习,可以了解到,Request对象是服务器端用来获取客户端的信息的。
但作为服务器和客户端进行交互,是不是还缺少服务器端向客户端发送信息呢?对象Response正是担任此责任。
负责将信息传递给用户的对象就是Response了,它可动态地响应客户端的请求,并将动态生成的响应结果返回给客户端浏览器。
一,Response.write
在Response中write方法是使用最频繁的一个了,write就是写:将指定的字符串写到当前的 HTTP 输出。
1,write.asp
<%
response.write("hello,world"&"<br>")
Randomize
response.write "任意数是"&rnd()&"<br>"
%>
response.write后面为所显示的信息,可以用括号包含,也可以直接书写(注意和response.write之间有空格)。
书写的字符串信息或者HTML代码相关,用引号包含;而ASP本身的函数或变量则不需要,直接用即可。
并且无论字符串信息、HTML代码、函数还是变量之间进行连接都是采用&号(针对vbscript)
以上遇到一个随机函数rnd(),该函数返回一个小于 1 但大于或等于 0 的值。
需要注意的是在调用 Rnd 之前,先使用无参数的 Randomize 语句初始化随机数生成器,该生成器具有基于系统计时器的种子。
若缺少Randomize,则无法继续生成随机种子。
下面一个利用随机函数的例子,产生随机背景颜色效果:
<script language=vbs>
Randomize ';首先Randomize产生随机种子
suij=rnd() ';接着将函数值赋变量suij
suij=replace(suij,".","9") ';然后对变量suij中小数点符号转换为数字9
suij=left(suij,6) ';再取变量中的左6位
document.write "<body bgcolor=&#35;"&suij&">" ';最后应用到背景颜色中去
</script>
当然要产生指定范围的随机整数,请使用以下公式:
Int((upperbound - lowerbound 1) * Rnd lowerbound)
这里, upperbound 是此范围的上界,而 lowerbound 是此范围内的下界。
<script language=vbs>
Do Until choose = vbNo
value = Int((41 * Rnd) 60) ';产生 60 到 100 之间的随机数。
msgbox value
choose = MsgBox ("Roll again? ", vbYesNo)
Loop
</script>
随机函数在做考试系统的时候非常有用,当然你也可以用来自己摇奖,拿个头彩也分点我就行了:)
二,Response.end
这是Response常用的一种方法,使 Web 服务器停止处理脚本并返回当前结果,文件中剩余的内容将不被处理。
主要放在一页多功能的ASP页中,为让程序运行到此,抑或往下的程序没必要再执行显示……
2,end.asp
<%response.write now()
response.end ';程序执行显示到此结束
response.write rnd()%>
三,Response.clear
该方法主要作用是清除缓冲区中的所有 HTML 输出,但该方法只清除响应正文而不清除响应标题。
该方法和end方法似相反,end是到此结束返回上面的结果,而clear却是清除上面的执行,然后只返回下面的结果。
3,clear.asp
<%response.write now()
response.clear ';以上程序到此全被清除
response.write rnd()%>
下面通过一个例子来仔细看看end and clear
4,end2clear.asp
<%
filepath=request.servervariables("script_name")
user=Request.Form("username")
pwd=Request.Form("password")
%>
<form method="POST" action="<%=filepath%>">
name:<input type="text" name="username"><br>
pwd:<input type="password" name="password"><br>
<input type="submit" value="submit">
</form>
<%
If user="cnbruce" and pwd="cnbruce" Then
response.write "采用clear方法,上面的程序结果将清除。"
response.clear '; 清空存储在缓存中的页面
Else
response.write "采用end方法,下面的程序将停运。"
Response.End '; 立即停止脚本处理,并将缓存中的页面输出
End If
%>
如果你只看到“刷新”链接就表明clear方法已经生效<br>
<a href="<%=filepath%>">刷新</a>
以上程序中,当输入用户名和密码同为cnbruce的时候会发现clear方法的处理结果,反之是另外一个效果。
四,Response.redirect
Redirect 方法是让浏览器立即重定向到程序指定的URL地址。这在根据客户的不同响应,为不同的客户指定不同的页面,或根据不同的情况指定不同的页面时,显得非常重要。
该方法是立即生效的,在其后的脚本都不执行。
5,redirect.asp
<%response.redirect("http://http://www.zjjv.com//bruce.com/")%>
以上四则运用属于Response对象的几个比较重要的方法:write、end、clear、redirect等当然方法还有:AddHeader、AppendToLog、BinaryWrite、Flush……
早说过,一个ASP对象除了对象方法外,还有对象属性
那response对象的属性有哪些呢?
五,Response.ContentType
ContentType 属性指定服务器响应的 HTTP 内容类型。如果未指定 ContentType,默认为 text/html。
6,contenttype.asp(非text/html的)
<% Response.ContentType = "text/HTML" %>
<% Response.ContentType = "image/GIF" %>
<% Response.ContentType = "image/JPEG" %>
<% Response.ContentType = "text/plain" %>
<% Response.ContentType = "image/JPEG" %>
六,Response.charset
Charset 属性将字符集名称附加到 Response 对象中 content-type 标题的后面,用来设置服务器响应给客户端的文件字符编码。
7,charset.asp
<% Response.charset = "big5" %>
中文显示,但采用的big5繁体的编码,所以看到的是乱码。
当然Response.ContentType和Response.charset应用得比较少了。直接在head头部属性里面添加就OK了。
七,Response.expires
该属性指定了在浏览器上缓冲存储的页,距过期还有多少时间。
如果用户在某个页过期之前又回到此页,就会显示缓冲区中的页面。
但若设置 response.expires=0,则可使缓存的页面立即过期。
这是一个较实用的属性,当客户通过 ASP 的登陆页面进入 WEB 站点后,应该利用该属性使登陆页面立即过期,以确保安全。
引用一个经典的例子
8,expires.asp
<%
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
%>
八,Response.status
设置服务器要响应的状态行的值。Response.status="状态描述字符串",字符串可以为一个三位整数或一串说明文字组成,但必须防在<html>之前。
9,status.asp
<% Response.Status = "401 Unauthorized" %>
九,Response.buffer
比较重要的一个,值为true or false。该属性指示是否缓冲页输出。
引用:当缓冲页输出时,只有当前页的所有服务器脚本处理完毕或者调用了 Flush 或 End 方法后,服务器才将响应发送给客户端浏览器,服务器将输出发送给客户端浏览器后就不能再设置 Buffer 属性。因此应该在 .asp 文件的第一行调用 Response.Buffer。
Response.buffer=true
对于Response对象的属性和方法先到这里,剩下一个数据集合,即cookie。
继续看cookies讲座吧。
(六):Cookies讲座
什么是 Cookie?Cookie 其实是一个标签,经常可能听到的中文翻译:小舔饼。当你访问一个需要唯一标识你的站址的 WEB 站点时,它会在你的硬盘上留下一个标记,下一次你访问同一个站点时,站点的页面会查找这个标记。
每个 WEB 站点都有自己的标记,标记的内容可以随时读取,但只能由该站点的页面完成。每个站点的Cookie与其他所有站点的Cookie存在同一文件夹中的不同文件内(你可以在 win98 的 Windows 目录下的 Cookie 文件夹中找到它们,而 win2k 则在 Documents and Settings 文件夹下特定用户的 cookies 文件夹中)。
一个 Cookie 就是一个唯一标识客户的标记,Cookie 可以包含在一个对话期或几个对话期之间某个 WEB 站点的所有页面共享的信息,使用 Cookie 还可以在页面之间交换信息。这项功能经常被使用在要求认证客户密码以及电子公告板、WEB 聊天室等 ASP 程序中。
尽管现在听起来cookie没有什么激动人心的,但实际上利用它,你能实现许多有意义的功能!比如说:你可以在站点上放置一个调查问答表,询问访问者最喜欢的颜色和字体,然后根据这些定制用户的web界面。并且,你还可以保存访问者的登录密码,这样,当访问者再次访问这个站点时,不用再输入密码进行登录。
当然,cookie也有一些不足。首先,由于利用cookie的功能可以编程实现一些不良企图,所以大多数的浏览器中都有安全设定,其中可以设置是否允许或者接受cookie(IE浏览器中“工具”--“Internet选项...”--“安全”--“自定义级别”--“Cookie的使用”;Netscape浏览器中“工具”--“Cookie管理器”--“管理贮存的Cookie”即可),因此这就不能保证随时能使用cookie。再者,访问者可能有意或者无意地删除cookie。当访问者的机器遇到“蓝屏”死机时,或者重新格式化硬盘、安装系统后,原来保存的cookie将全部丢失。最后一点,有一些最初始的浏览器并不能支持cookie。
◆ 怎样利用cooklie?
有2种使用cookie的基本方式:
1、将cookie写入访问者的计算机(使用 Response 命令)
2、从访问者的计算机中取回cookie(使用 Request 命令)
◆ 创建cookie的基本语法: Response.Cookies(cookie)[(key)|.attribute]=value
这里的 cookie 是指定 cookie 的名称。
而如果指定了 key,则该 cookie 就是一个字典。
(测试一cookie是否为一个字典可用后面代码显示布尔值:<%=Request.Cookies("cookiename").HasKeys%>。为true是字典,false则不是。 )
Attribute 指定 cookie 自身的有关信息。Attribute 参数可以是下列之一 :
①Domain 若被指定,则 cookie 将被发送到对该域的请求中去。域属性表明cookie由哪个网站产生或者读取,默认情况下,cookie的域属性设置为产生它的网站,但你也可以根据需要改变它。(Response.Cookies("CookieName").Domain = "http://www.zjjv.com/")
②Path 为一路径属性,该属性可以实现更多的安全要求,通过设置网站上精确的路径,就能限制cookie的使用范围。如果未设置该属性,则使用应用程序的路径。(Response.Cookies("CookieName").Path = "/maindir/subdir/path" )
③Expires 指定 cookie 的过期日期。为了在会话结束后将 cookie 存储在客户端磁盘上,或在许多时候,我们希望能更长时间地在访问者的计算机上保存cookie。必须设置该日期。若此项属性的设置未超过当前日期,则在任务结束后 cookie 将到期。
后面的代码,就可以设置cookie的使用到期时间为“2010年1月1日”: Response.Cookies("CookieName").Expires=&#35;January 01, 2010&#35;
后面的代码,将设定cookie的过期时间为“cookie的创建时间+365天”:Response.Cookies("CookieName").Expires=Date 365
但最好不要随便写 Response.Cookies("CookieName").Expires=Date,这样页面之间的调用时值会为空。
执行下面的代码将会在访问者的计算机中创建一个cookie,名字=VisitorName,值=Ken :
Response.Cookies("VisitorName")="Ken"
执行下面的代码将会在访问者的计算机中创建一个cookie,名字=VisitorName,值=表单中UserName的值
Response.Cookies("VisitorName")=Request.Form("UserName")
你可以扩展下面的代码成为Cookie子关键值(CookieSubName),即cookie字典的生成。代码如下:
Response.Cookies("VisitorName")("FirstName")="Ken"
Response.Cookies("VisitorName")("LastName")="Baumbach"
◆ 读取cookie的基本语法:Request.Cookies(cookie)[(key)|.attribute]
cookie 指定要检索其值的 cookie。
key 可选参数,用于从 cookie 字典中检索子关键字的值。
attribe 指定 cookie 自身的有关信息。如:HasKeys 只读,指定 cookie 是否包含关键字。
如果客户端浏览器发送了两个同名的 cookie,那么 Request.Cookie 将返回其中路径结构较深的一个。例如,如果有两个同名的的 cookie,但其中一个的路径属性为 /www/ 而另一个为 /www/home/,客户端浏览器同时将两个 cookie 都发送到 /www/home/ 目录中,那么 Request.Cookie 将只返回第二个 cookie。
案例分析:
◆ num.asp(通过留在本地磁盘上的cookie记录一年内访问本站的次数,第一次显示“首次访问”,以后显示“第几次访问”)
<%
dim num
num=request.cookies("visitnum")
if num > "0" then
num=num 1
Response.write "您已是第"&num&"次访问本站点了。"
else
Response.write "欢迎您首次访问本站。"
num=1
end if
response.cookies("visitnum")=num
response.cookies("visitnum").expires=date 365
%>
◆ showcookie.asp(从Cookies文件夹中遍历出浏览器所有的Cookie name,以及相关的字典Cookie的显示(蓝字显示))
<%
For each cookie in Request.Cookies
if Request.cookies(cookie).HasKeys =false then
Response.write cookie & "=" & Request.Cookies(cookie)
Response.write ("<br>")
Else
for each key in Request.Cookies(cookie)
Response.write ("<font color=blue>")
Response.write cookie & ".("&key&")" & "=" & Request.Cookies(cookie)(key)
Response.write ("</font><br>")
next
end if
next
%>
◆check.asp
';首先,设置页面。然后,检查表单变量(在同一个页面中)。如果表单变量存在,就创建cookie,并设置到期时间。
<%@ LANGUAGE="VBSCRIPT" %>
<%
bgcolor = Request.Form("bgcolor")
fgcolor = Request.Form("fgcolor")
pwd = Request.form("pwd")
If bgcolor <>"" or fgcolor <>"" then
Response.cookies("check")("bgcolor") = bgcolor
Response.Cookies("check")("fgcolor") = fgcolor
Response.Cookies("check")("pwd") = pwd
Response.Cookies("check").Expires=&#35;may 01, 2004&#35;
End if
';接着,读取cookie
bgcolor = request.cookies("check")("bgcolor")
fgcolor = request.cookies("check")("fgcolor")
pwd = request.cookies("check")("pwd")
';如果cookie在访问者的计算机上不存在,就创建一个表单,询问相关信息
If bgcolor ="" and fgcolor ="" and pwd="" then
%>
<HTML>
<HEAD> </HEAD>
<body>
<DIV ALIGN="CENTER" >
<Form action="check.asp" method="POST">
Bgcolor: <input type="text" name="bgcolor"><BR>
Fgcolor: <input type="text" name="fgcolor"><BR>
Password:<input type="password" name="pwd"><BR>
<input type="submit" value="Submit">
</Form>
</DIV>
</BODY>
<%
End if
';如果cookie已经存在,并且bgcolor存在,就跳转到color.asp。
If bgcolor <> "" then
Response.Redirect "color.asp"
End if
%>
◆color.asp(显示用户爱好颜色的页面特性)
<%
bgcolor=request.cookies("check")("bgcolor")
fgcolor=request.cookies("check")("fgcolor")
pwd=request.cookies("check")("pwd")
%>
<%response.write("<body bgcolor="&bgcolor&"><font color="&fgcolor&">")%>
你的密码是:
<%response.write(" "&pwd&" ")%>
(七):一些简单的ASP练习
练习使用request对象接受数据,并且综合运用些函数。
cnbruce.html
<form action="cnbruce.asp" method="post">
<input type="text" name="title"><br>
<textarea name="content" rows=10 cols=20></textarea><br>
<input type="submit">
</form>
cnbruce.asp
<%
function th(str)
str=replace(str,"妈的","MD")
str=replace(str,"靠","KAO")
th=str
end function
function encode(str)
str = replace(str, ">", ">")
str = replace(str, "<", "<")
str = Replace(str, CHR(32), " ")
str = Replace(str, CHR(13), "")
str = Replace(str, CHR(10) & CHR(10), "</P><P>")
str = Replace(str, CHR(10), "<BR>")
encode=str
end function
%>
<%title=request.form("title")
content=request.form("content")%>
文章标题:<%=th(title)%><hr>
文章内容:<%=encode(th(content))%>
th(str)为自定义函数,主要功能很简单:过滤字符。encode(str)也为自定义函数,主要功能是完整地显示被传递的信息。
CHR(10)表示换行,CHR(13)表示回车,CHR(32)表示空格。
(八):内置对象Session
ASP对象中除了用于发送(Response)、接收和处理数据(requeest)、服务器访问(Server)的对象外,还有一些非常实用的标记Active Server应用程序(Application)和单个用户信息(Session)的对象。
Session对象
该对象在ASP使用中占相当大的比例。由于网页是一种无状态程序,无法得知用户浏览状态。在ASP中,通过Session对象来记录使用者私有的数据变量,以作为用户再次对服务器提出要求时做确认,用户在程序的Web页面之间跳转时,存在Session对象中的变量将不会消失。
这些真的是很重要的功能,尤其是有会员的系统必须要用到的。像是会员的登入账号、时间、状态以及许许多多该记录的实时数据(如购物系统记录使用者的购物篮内的商品),这些信息属于各使用者私人所需要,通常开发者都是使用 Session 记录处理。
在ASP中的Session是使用Cookies构成,服务器将所有的Session内记录的数据,以Cookies的方式传至用户的浏览器。通常一般浏览器会将这些Cookies存起来,每当使用者点选连结,再次与服务器做联机时,浏览器就会把这些Cookies传回Server供做处理:这即是Session的运作原理。由此可知会话状态Session仅在支持cookie的浏览器中保留,如果客户关闭了Cookie 选项Session也就不能发挥作用了。
一、Session.SessionID
SessionID 属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识,会话标识以长整形数据类型返回。在很多情况下 SessionID 可以用于 WEB 页面注册统计。
利用该属性可以解决一种对用户的控制问题。该问题的主要功能就是,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员名登录,就不能浏览这个模块:也就是说一个会员名同时只能一个人浏览此模块。
通过用会员名(假设为UserID,唯一)和SessionID来实现了控制。当会员登录时,给这个会员一个Session记录登录状态如:Session("Status")="Logged",同时把这个会员的Session.SessionID写入数据库。当他要浏览此模块时,先判断其是否登录,若已经登录再判断它的SessionID是否与数据库记录的相同,如果不同则不能访问。
这样,当另一个用户用相同的会员名登录时,那么数据库中记录的就是新的SessionID,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用,它防止了一个会员名给多个人浏览的问题,为公司保障了利益。
<%=Session.SessionId%>
是单独生成的唯一ID标识,可刷新调试。
二、Session.TimeOut
该属性设置的Session的最大间隔时间。间隔时间是指客户器端从最近一次向Web服务器提出要求,到下一次向Web服务器提出要求的时间。可以理解为:如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。Timeout 属性是以分钟为单位,为该应用程序的Session对象指定超时时限的,一般默认为20分钟。这在网吧等公共场所,登录个人信息页而忘记关闭窗口时,显得比较重要(至少可以把时间设短些)。
<%Session.TimeOut=10%>
以上SessionId、TimeOut属于Session对象的两个属性,下面看该对象的一个方法Abandon
三、Session.Abandon
该方法是Session对象的唯一方法,可以清除Session对象,用来消除用户的Session对象并释放其所占的资源。当然你如果没有明确调用Abandon方法,一旦会话超时,服务器也会将删除这些对象并释放资源。
下面就用两个页的程序来认识Session对象以及Abandon方法的利用。
1,login.asp
<%
';是提取url中变量loginout的值是否为true,若为真,就执行Session.Abandon()。
if Request.QueryString("loginout")="true" then
Session.Abandon()
end if
';只有在当点击了submit按钮的前提下,再来判断提取的东西都不为空,则建立Session对象。
submitname=request.form("submit1")
if submitname="submit" then
if Request.Form("name")<>"" and Request.Form("pwd")<>"" then
Session("name")=Request.Form("name")
Session("pw")=Request.Form("pwd")
end if
end if
%>
<%
';如果Session("name")不为空,则显示Session("name")的值,并且做一个到info.asp的链接。
if Session("name")<>"" then
response.write("你的name值是:"&Session("name"))
response.write("<br><a href=';info.asp';>显示你的资料</a>")
else
';否则,即Session("name")为空不存在,则显示表单用以输入建立Session的平台。
%>
<form action="login.asp" method="post">
姓名:<input type="text" name="name"><br>
密码:<input type="password" name="pwd"><br>
<input type="submit" value="submit" name="submit1">
</form>
<!--同样做了一个到info.asp的链接。-->
<a href="info.asp">显示你的资料</a>
<%end if%>
注意Session("name")为空和不为空的时候,都做了一个到info.asp的链接,具体调试结果如何,再来看info.asp的内容。
2,info.asp
<%
';如果session对象值为空则跳转到login.asp
if session("name")="" then
Response.Redirect("login.asp")
';否则就显示个人信息
else
Response.Write("你的姓名:"&session("name")&"<br>")
Response.Write("你的密码:"&session("pw")&"<br>")
end if
%>
<a href="login.asp">返回</a>
<a href="login.asp?loginout=true">退出</a>
可以看出来,info.asp页面内容的显示其实是需要条件的。那就是必须得有一个session值的存在,这样才可以显示具体的信息。这在登录系统中运用得比较多。
你可以把login.asp想象成一个登录窗口,当然我的这个比较简单(只要输入用名和密码就生产Session了),实际情况是:判断输入的用名和密码是否和数据库中的用名和密码吻合,如果正确吻合才生成Session的。然info.asp页面的作用刚好可以做为一权限页面,因为进入该页需要Session,而Session的产生是确保用名密码正确的。
所以当一开始出现表单窗口时,你点login.asp链接是打不开的,只有当提交了表单生成了Session后才能进入。这正是登录系统的精髓所在,Do You Know?:)
四、Session_OnStart
Session_OnStart属于Session对象的一类事件。它是在服务器创建新会话时发生的。服务器在执行请求的页之前先处理该脚本。Session_OnStart 事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。
对象的例程每一次启动时触发Session_OnStart事件,然后运行Session_Onstart事件的处理过程。也就是说,当服务器接收到应用程序中的URL的HTTP请求时,触发此事件,并建立一个Session对象。
当然说到Session_OnStart事件就不能不谈到一个文件Global.asa(P.S:我打算把该文件和Chat程序放在一起说的,所以现在先不作过多解释)
具体用法先透露,写在Global.asa文件内部
<SCRIPT RUNAT=Server Language=VBScript>
.......
Sub Session_OnStart
.......
End Sub
.......
</SCRIPT>
五、Session_OnEnd
一看也就知道是Session对象的另一类事件了。当调用Session.Abandon方法时或者在TimeOut的时间内没有刷新,这会触发Session_OnEnd事件,然后执行里面的脚本。同样具体用法在后面将写的Global.asa文件专题中详细介绍到,简单语法如下:
<SCRIPT RUNAT=Server Language=VBScript>
.......
Sub Session_OnEnd
.......
End Sub
.......
</SCRIPT>
最后,不知道大家有没有玩过这样的一个程序:很令人讨厌的,让你永远关不掉的程序页面。
只做程序调试,不要去作弄别人。
以下文件保存为bug.html
<body onunload=javascript:window.open("bug.html")>
发现该文件关不了了?(当然你要关闭,把源代码修改下)
那现在的要求是:计算关闭的次数,如果超过多少次就可以自行关闭,那下面就采用到session
以下文件保存为bug.asp
<%if session("num") < 2 then%>
<body onunload=javascript:window.open("bug.asp")>
<%session("num")=session("num") 1%>
<%else%>
<script>
self.close()
</script>
<%end if%>
呵呵,当你关闭三次以后,窗口就再也不弹出了。了解吧:)
以上就是对Session对象的系统学习。