在ASP中传值的方式有许多种,典型的就是使用application变量、session变量以及cookies、forms进行传值。以下,我们就这几种方法作一些简单介绍,并指出优劣。
1、application变量
Application变量是全局性的,即一旦定义,它将影响到程序的所有部份。在结构化程序设计和面向对象的程序设计方法中,一般应尽量避免全局变量的使用,因为全局变量无助于程序的可读性,但是在某些场合下,巧妙的使用application会起到事半功倍的效果。例如:将application变量用作计数器。具体说来,可以如下进行实现。
在虚拟根目录下的global.asa文件中定义了session和application的启动和终止事件,session的启动事件是指的是每一个用户浏览到本网站时,要发生的事件,session的终止事件是指当此人离开本网站时,要发生的事件;而application的启动事件指的是当系统webserver启动时,要发生的事件,而application的终止事件指的是当系统webserver关闭时,要发生的事件。
基于如上的理由,我们可以在application启动事件中获取上一次Webserver关闭时保留的计数器值。这里,我们就假设其为0。
〈SCRIPT LANGUAGE=VBScript RUNAT=Server〉
Sub Application_OnStart
application("counter") = 0
End Sub
〈/SCRIPT〉
在session启动事件中,简单的如下代码,就可以进行计算器的工作。
〈SCRIPT LANGUAGE=VBScript RUNAT=Server〉
Sub Session_OnStart
application("counter") = application("counter") + 1
End Sub
〈/SCRIPT〉
另外,你需要在application的关闭事件Application_OnEnd中保存计数器的值。
接下来,你可以在任何网页上使用〈%= application("counter")%〉来显示计数器的值。需要说明的,这种做法可以避免用户对页刷新,传统计数器会重新计数的弊端。另外,如果在session的关闭事件Session_OnEnd中执行如下代码,则application("counter")就统计了当前在线的全体人数。
〈SCRIPT LANGUAGE=VBScript RUNAT=Server〉
Sub Session_OnEnd
application("counter") = application("counter") - 1
End Sub
〈/SCRIPT〉
2、session变量
同application变量不同,session变量是相对局部的。这句话的意思是当一个用户进入到相关的页面(指的是定义这个session变量的页面),这个session变量就一直在此人的全局范围内发生作用,直至此人关闭浏览器或系统规定时间内不点击本网站的任何内容,该变量就将失效。举个说,在Test.asp页中有如程序代码。
〈%
if session("homepage") = "" then
response.write "请首先浏览主页!"
response.end
end if
%〉
在主页加入如下代码
〈%
session("homepage") = "yes"
%〉
用户甲从主页进入后,sesion("homepage")的值为"yes",因此当他浏览Test.asp时将不付出任何问题,Test.asp也不会出现任何问题,也不会给出提示信息。同时(指用户甲能正常访问Test.asp的同时),用户乙没有访问主页面,而直接访问Test.asp,他将会被给出提示信息。这是因为,对用户乙来讲,sesion("homepage")的值为空字符串。
因此,如果程序员不想让非注册用户访问到相关的页面,如上的方法显然是有效的,当然也可以使用其他方法控制用户的访问,如使用iaspi接口,但相对要麻烦得多。
总的来说来,session变量的生存期要比application变量短得多,并且它只对某个用户有效,另一方面,对某个用户来讲,session变量又是全局变量,也需要谨慎使用。
3、cookies变量
cookies变量存放的位置是在用户windows目录下的cookies子目录中,cookies变量通常来保存用户的某些基本信息,这样做的好处在于可以免除用户每次登录网站时输入用户名和密码,而程序员只需要检测存放在cookies变量中的值。随之带来的弊端就是用户的隐私难以确保。
cookies变量值的设定方法为:
〈%
response.cookies("time") = 1
%〉
cookies变量值的获取为:
〈%
ls_time = request.cookies("time")
%〉
4、querystring传值
querystring传值是较为常见的一种传值,它使用最为方便,可以简单通过url就可以进行值传递,但是这种方法的缺点就是,所传递的值在url中被直接显示,不利于保密,另外,当传递的参数过多时,url显示的字符串过长,影响美观。
下面的字符串可以在IE浏览器的url中输入,目的就是向程序test.asp传入参数name1, name2, name3的值,注意:程序与参数之间是以?进行间隔的,参数与参数之间是以&号进行间隔的。
http://localhost/test.asp?name1=1111&name2=2222&name3=3333
下边的代码显示了如何获取参数传递过来的值。
〈%
ls_name1 = request.querystring("name1")
ls_name2 = request.querystring("name2")
ls_name3 = request.querystring("name3")
response.write ls_name1 + ls_name2 + ls_name3
%〉
5、forms传值
使用forms传值,主要是使用forms中hidden类型的单行文本框进行值传递。这种值传递方法方法非常安全,它避免了前几种的主要问题,这是笔者最为推荐使用的一种方法,但使用相对要复杂一些,它适用于交互方式使用。
下面的代码显示值传递的方法:
〈%
'获得T2的值
ls_hidden = request.form("T2")
response.write ls_hidden + "〈br〉"
%〉
〈form method="POST"〉
〈input type="text" name="T1" size="20"〉〈br〉
〈input type="hidden" name="T2" value="120"〉〈br〉
〈input type="submit" value="提交" name="B1"〉〈input type="reset" value="全部重写" name="B2"〉〈/p〉
〈/form〉
1、application变量
Application变量是全局性的,即一旦定义,它将影响到程序的所有部份。在结构化程序设计和面向对象的程序设计方法中,一般应尽量避免全局变量的使用,因为全局变量无助于程序的可读性,但是在某些场合下,巧妙的使用application会起到事半功倍的效果。例如:将application变量用作计数器。具体说来,可以如下进行实现。
在虚拟根目录下的global.asa文件中定义了session和application的启动和终止事件,session的启动事件是指的是每一个用户浏览到本网站时,要发生的事件,session的终止事件是指当此人离开本网站时,要发生的事件;而application的启动事件指的是当系统webserver启动时,要发生的事件,而application的终止事件指的是当系统webserver关闭时,要发生的事件。
基于如上的理由,我们可以在application启动事件中获取上一次Webserver关闭时保留的计数器值。这里,我们就假设其为0。
〈SCRIPT LANGUAGE=VBScript RUNAT=Server〉
Sub Application_OnStart
application("counter") = 0
End Sub
〈/SCRIPT〉
在session启动事件中,简单的如下代码,就可以进行计算器的工作。
〈SCRIPT LANGUAGE=VBScript RUNAT=Server〉
Sub Session_OnStart
application("counter") = application("counter") + 1
End Sub
〈/SCRIPT〉
另外,你需要在application的关闭事件Application_OnEnd中保存计数器的值。
接下来,你可以在任何网页上使用〈%= application("counter")%〉来显示计数器的值。需要说明的,这种做法可以避免用户对页刷新,传统计数器会重新计数的弊端。另外,如果在session的关闭事件Session_OnEnd中执行如下代码,则application("counter")就统计了当前在线的全体人数。
〈SCRIPT LANGUAGE=VBScript RUNAT=Server〉
Sub Session_OnEnd
application("counter") = application("counter") - 1
End Sub
〈/SCRIPT〉
2、session变量
同application变量不同,session变量是相对局部的。这句话的意思是当一个用户进入到相关的页面(指的是定义这个session变量的页面),这个session变量就一直在此人的全局范围内发生作用,直至此人关闭浏览器或系统规定时间内不点击本网站的任何内容,该变量就将失效。举个说,在Test.asp页中有如程序代码。
〈%
if session("homepage") = "" then
response.write "请首先浏览主页!"
response.end
end if
%〉
在主页加入如下代码
〈%
session("homepage") = "yes"
%〉
用户甲从主页进入后,sesion("homepage")的值为"yes",因此当他浏览Test.asp时将不付出任何问题,Test.asp也不会出现任何问题,也不会给出提示信息。同时(指用户甲能正常访问Test.asp的同时),用户乙没有访问主页面,而直接访问Test.asp,他将会被给出提示信息。这是因为,对用户乙来讲,sesion("homepage")的值为空字符串。
因此,如果程序员不想让非注册用户访问到相关的页面,如上的方法显然是有效的,当然也可以使用其他方法控制用户的访问,如使用iaspi接口,但相对要麻烦得多。
总的来说来,session变量的生存期要比application变量短得多,并且它只对某个用户有效,另一方面,对某个用户来讲,session变量又是全局变量,也需要谨慎使用。
3、cookies变量
cookies变量存放的位置是在用户windows目录下的cookies子目录中,cookies变量通常来保存用户的某些基本信息,这样做的好处在于可以免除用户每次登录网站时输入用户名和密码,而程序员只需要检测存放在cookies变量中的值。随之带来的弊端就是用户的隐私难以确保。
cookies变量值的设定方法为:
〈%
response.cookies("time") = 1
%〉
cookies变量值的获取为:
〈%
ls_time = request.cookies("time")
%〉
4、querystring传值
querystring传值是较为常见的一种传值,它使用最为方便,可以简单通过url就可以进行值传递,但是这种方法的缺点就是,所传递的值在url中被直接显示,不利于保密,另外,当传递的参数过多时,url显示的字符串过长,影响美观。
下面的字符串可以在IE浏览器的url中输入,目的就是向程序test.asp传入参数name1, name2, name3的值,注意:程序与参数之间是以?进行间隔的,参数与参数之间是以&号进行间隔的。
http://localhost/test.asp?name1=1111&name2=2222&name3=3333
下边的代码显示了如何获取参数传递过来的值。
〈%
ls_name1 = request.querystring("name1")
ls_name2 = request.querystring("name2")
ls_name3 = request.querystring("name3")
response.write ls_name1 + ls_name2 + ls_name3
%〉
5、forms传值
使用forms传值,主要是使用forms中hidden类型的单行文本框进行值传递。这种值传递方法方法非常安全,它避免了前几种的主要问题,这是笔者最为推荐使用的一种方法,但使用相对要复杂一些,它适用于交互方式使用。
下面的代码显示值传递的方法:
〈%
'获得T2的值
ls_hidden = request.form("T2")
response.write ls_hidden + "〈br〉"
%〉
〈form method="POST"〉
〈input type="text" name="T1" size="20"〉〈br〉
〈input type="hidden" name="T2" value="120"〉〈br〉
〈input type="submit" value="提交" name="B1"〉〈input type="reset" value="全部重写" name="B2"〉〈/p〉
〈/form〉
浙公网安备 33010602011771号