配色: 字号:
第5章 Application、Session和Server
2012-05-13 | 阅:  转:  |  分享 
  
第5章Application、Session和Server本章主要内容:理解Application对象的成员使用Applicat
ion对象实现全局变量Global.sas文件的结构理解Session对象的成员使用Session对象建立会话级变量理解S
erver对象的成员掌握服务器端的重定向5.1Session对象Session对象在ASP程序设计中也占了相当大的比
例,是非常实用的对象。由于HTTP是一种无状态的的通信协议,所以无法使页面之间进行传递,但使用Session对象就可以记录用户
的相关信息,可以用来为用户再次对服务器提供要求时作确认。这样用户在应用程序的WEB间跳转时,就可以使变量存储在Session对象中
而不会丢失,而且会在用户的整个会话中一直存在下去。5.1Session对象当用户请求应用程序的网页时,如果该用户还没有
会话,则服务器会自动创建一个Session对象,当会话过期或被放弃后,服务器将终止此会话。5.1Session对象Ses
sion工作原理:在应用程序中,当客户端启动一个Session时,ASP会自动生成一个SessionID,并将该SessionID
回送客户端浏览器,而浏览器则将该SessionID保存在Cookies中。当客户端再次向服务器发出HTTP请求时。ASP检查申请表
头的该SessionID,并回应相应该SessionID的该Session信息。说明:会话状态仅在支持Cookie的浏览器中保留
。5.1Session对象Session对象语法格式如下:Session.collection|propert
y|method5.1Session对象5.1.1session对象的方法Session对象仅提供了Abandon一
个方法.作用:用于结束Session,删除所有存储在Session对象中的对象并释放这些对象的资源。而且同时Session_on
End事件将一起被激活。语法:Session.Abandon5.1Session对象5.1.2session对象的主
要属性1、SessionID属性在创建会话时,服务器会为每一会话生成一个单独的标识。SessionID属性返回用户的会话
标识。语法:长整数=Session.SessionID5.1Session对象5.1Session对象
5.1Session对象2、TimeOut属性Timeout属性以分钟为单位为该应用程序的Session对象
指定超时时限。如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。所谓的超时时限是指服务器端从最近一次向WEB服务器提出请求
,到下一次向WEB服务器提出请求的时间。语法:Session.Timeout=分钟数5.1Session对象
5.1Session对象5.1Session对象5.1.3session对象的事件Session对象有两个事件
:Session_OnStart和Session_OnEnd事件。其中Session_OnStart事件对应Session对象
的起始事件,每个Session开始都会激活一个Session_OnStart事件;而Session_OnEnd事件对应Sessio
n对象的结束事件,每一个Session结束时都会激活一个Session_OnEnd事件。这两个事件的处理程序都必须放在glob
al.asa文件中加以存储,除此之外,还必须将这个文件放在虚拟路径的根目录下,并且一个虚拟路径只能有一个global.asa文件。
以后会有专门的一节讲解global文件,具体的将在后面进行介绍。5.1Session对象5.1.4session对象
的数据集合Session对象的数据集合有Contents和StaticObject两个数据集合。Contents数据集合包含所有
已用脚本命令添加到会话中的项目,它可用于确定指定会话项的值或遍历集合并检索出会话中所有项的列表。而Contents数据集合包含了S
ession对象中用标记创建的并给定了会话作用域的所有对象,该集合可用于确定对象特定属性的值,或用于遍历集合并获取
所有对象的全部属性。语法如下:Session.Contents|StaticObject(Session变量名称)5.1.5
session对象应用实例Session_1.asp<%Dimuser_name,user_age,
user_sexuser_name="张三"user_age=20user_sex="男“Session("name")
=user_name''将姓名变量赋值给Session对象赋值Session("age")=user_age''将
年龄变量赋值给Session对象赋值Session("sex")=user_sex''将性别变量赋值给Session对象赋
值 %>

Session值已经存入

打开Session_2
.asp查看结果

5.1.5session对象应用实例Session_2.asp
<%Dimuser_name,user_age,user_sexuser_name=Session("name")
''取出Session对象的值user_age=Session("age")user_sex=Session("s
ex")Response.Writeuser_name&"您好!
您的年龄是:"&user_age&"
您的性别是
:"&user_sex%>5.1Session对象例二:利用Session实现有效性验证
我们想编写一个用户登陆程序,当用户输入正确的用户名和密码时,正常登陆。当用户输入错误的用户名或密码时,则需重新登陆,并且只
允许用户尝试登陆三次。<%response.Buffer=true%><%session("usename")=reques
t.Form("name")session("mima")=request.Form("psw")ifisempty(ses
sion("usename"))thencount=0session("count")=countendifif
(session("usename")="admin"andsession("mima")="admin")thenr
esponse.Clearresponse.Redirect("other_index.asp")endif
if(session("count")<=3)then%>ethod="post"action="">用户名:="name"/>
密码:>
alue="提交"/><%session("count")=session("count")+1else
response.Write("你已经登陆了三次!")endif%>例三:利用Session实现购物车index.asp
<%session("s1")=request("c1")session("s2")=request("
c2")session("s3")=request("c3")%>各种肉大甩卖,一律十块:OST"action=“index.asp">

ame="c1"value="猪肉">猪肉

value="牛肉">牛肉

">羊肉

puttype="reset"value="全部重写"name="B2">p">买点别的查看购物车

ODY>例三:利用Session实现购物车index1.asp<%session("s4")=reques
t("b1")session("s5")=request("b2")session("s6")=request("b3"
)%>各种球大甩卖,一律八块:


篮球

>足球

ype="checkbox"name="b3"value="排球">排球

it"value="提交"name="x1">="B2">买点别的>查看购物车

例三:利用Session实现购物车index2.as
p你选择的结果是:
<%response
.writesession("s1")&"
"response.writesession("s2")&"
"
response.writesession("s3")&"
"response.writesession("
s4")&"
"response.writesession("s5")&"
"response.writ
esession("s6")&"
"%>
5.1Sessi
on对象5.1Session对象5.1Session对象在刚才的例子中,我们都是采用一个变量来存储sessio
n的值,那么能否利用Session存储数组信息?5.1Session对象5.1.5利用Session存储数组信息Se
ssion存储数组与存储单个变量的方法基本上一样的,但Session将传入的数组视为一个整体,只能对整个数组进行整体存取,而不能对
数组元素分别进行存取。例如:<%Session(“arry”)(4)=“埔东新区”%>是不可以的。5
.1Session对象Session_3.asp<%Dimuser_name()Redimuser_name
(5)user_name(0)="白芸"user_name(1)="赵敏"Session("arry_user_name"
)=user_name''传入数组到Session对象Response.Write"ion_4.asp''>单击显示数组信息"%>5.1Session对象Session_4.asp<%Di
muser_name’注意声明方式,未加扩号user_name=Session("arry_user_name")''返回
Session数组元素Response.Writeuser_name(0)&"您好,欢迎您
"Response.W
riteuser_name(1)&"您好,欢迎您
"%>5.2Application对象
Application对象和Session对象有很多的相似之处,它们的功能都是用于不同的ASP程序之间共享信息。虽然它们有很多
相似之处,但它们的本质上是有区别的:Session对象必须建立在Cookie的技术之上,而Application对象却没有这个
必要;应用范围不同,Session对象只是面对单一用户,而Application对象用于面对所有用户,它可用来管理整个应用程
序。Application对象具有集合、方法和事件。5.2Application对象5.2.1Application对
象的方法Application对象提供了Lock和UnLock两个方法,前者用来其它用户修改Application对象的任何变量
,而后者则允许其它用户对Application对象的变量进行修改。语法格式:Application.Lock‘锁定Appl
ication对象Application.UnLock‘解锁Application对象5.2Application对象
5.2.2Application对象的事件同前面介绍的Session对象类似,Application对象同样也有两个事件。
每当一个Application开始,都会激活一个Application_OnStart事件;每当一个Application结束
,都会激活一个Application_OnEnd事件。这两个事件也都要放到global文件中,因此我们也要在5.2.4中详细介
绍。5.2Application对象5.2.3Application对象的数据集合Application对象的数据集合
也包括Contents数据集合和StaticObject数据集合。我们可以使用Contents数据集合获取给定的应用程序作用域的项
目列表或指定的一特殊项目为操作对象,它可以允许程序取得用户可以使用的所有Application对象,但是不包括以
标签所建立的对象以及SERVER对象的CreateObject方法所建立的对象。StaticObject数据集合可以取得CT>标签建立的Application对象,可以使用该集合确定某对象的指定属性的值及检索所有静态对象的所有属性。语法:A
pplication.Contents|StaticObject(Application对象变量名称)5.2Applicat
ion对象5.2.4global文件我们已经知道Application和Session对象的OnStart、OnEnd事件
的脚本,都必须是在Global.asa文件中声明的。那么Global.asa究竟是什么样的一个文件?它有什么样的作用?又
该如何运用呢?5.2Application对象一、Global.asa文件概述Global文件扩展名为:.asa,它是
ActiveServerApplication的首字母缩写。作用:Global.asa文件可以管理在ASP对象中两个非常重要
且苛刻的对象:Application、Session。说明:它是一个可选文件,程序员可以在该文件中指定事件脚本,并声明具有会话和
应用程序作用域的对象。该文件的内容不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象。该文件必须存放在应用程序的
根目录内,且每个应用程序只能有一个Global.asa文件。使用条件:Global.asa文件仅能用于创建对象的引用和捕获启动
,以及结束Application对象和Session对象。5.2Application对象二、Global.asa文件的使
用及语法Global.asa文件主要基于会话及事件被访问,它在三种情况下才会被调用:1、当Application_O
nStart或Application_OnEnd事件被触发;2、当Session_OnStart或Session_OnEnd事件
被触发;3、当引用一个在Global.asa文件里被实例化的对象(Object)。Global.asa的标准语法格式为:<
SCRIPTLANGUAGE="VBScript"RUNAT="Server">SubApplication_OnStar
t''Application_OnStart当任何客户首次访问该应用程序的首页时运行事件的处理程序代码EndSubSub
Application_OnEnd''Application_OnEnd当该站点的WEB服务器关闭时运行事件的处理程序代
码EndSubSubSession_OnStart''Session_OnStart当客户首次运行ASP应用程
序中的任何一个页面时运行事件的处理程序代码EndSubSubSession_OnEnd''Session_OnEn
d当一个客户的会话超时或退出应用程序时运行事件的处理程序代码EndSub说明:使用globa
l.asa文件时注意以下几点:(1)每一个应用程序可能有多个ASP文件组成,但一个站点只能有一个global.asa文件,并且文
件名也只能是global.asa(2)global.asa文件只能存放在站点的根目录中(3)global.asa文件中,不能写
成<%%>的形式,只能按照规定的格式书写(4)global.asa文件中不能含有任何输出语句,因为该文件是用来被调用的,根本不会
输出。(5)global.asa文件要单独存盘在站点的根目录中(6)global.asa文件必须按照标准书写格式书写。glo
bal.asa应用举例例如1:控制用户强制进入某页面想实现的功能:只要是用户第一次登录本站,则会跳转到指定的页面:htp:/
/www.eb2001.com/思路:使用global.asa文件使用Session_onStart事件,因为,当用户访
问一个网站时,都会产生Session_onStart事件。编写global.asa文件,并将该文件放在站点的根目录中。glo
bal.asa应用举例Global.asa文件程序如下:"Server">SubSession_OnStart‘只要是用户第一次登录本站,则会启动Session_OnStart事件
response.redirect("http://www.eb2001.com/")EndSubgl
obal.asa应用举例例如2:显示在线人数:Server>SubApplication_onStart''初始值为0Application("OnLine")
=0EndSubSubSession_onStart''一个用户访问进行记数加1App
lication.LockApplication("OnLine")=Application("OnLine")
+1Application.UnlockEndSubSubSession_On
End''一个用户进程的结束,记数减1(P.S.如果没有该事件程序,则执行的就是页面访问程序了。)Application
.LockApplication("OnLine")=Application("OnLine")-1A
pplication.UnlockEndSub5.2Application对象onli
ne.asp<%ifrequest.querystring("logout")="true"thensessio
n.Abandon()response.endendif%>当前共有<%=Application("OnLine")%>
在线退出5.2Application对象上面的
程序运行时你会发现:当进行“退出”连接后关闭窗口和直接关闭窗口效果是不一样的。因为Session存在时间的缘故,当直接进行关闭窗
口,并不能触发Session_OnEnd事件,所以直接进行关闭窗口时间,将不会执行Session_OnEnd事件所对应的程序。
怎么解决呢?5.2Application对象当网页进行关闭的时候可以连带一个onun
load事件,那么该onunload只要能执行Session的注销功能不就是我们需要的吗?将online.asp进行修改如下:
5.2Application对象online.asp<%ifrequest.querystring("
logout")="true"thensession.Abandon()response.endendif%>dyonunload=javascript:window.open("exit.asp")>当前共有<%=Applicatio
n("OnLine")%>在线退出5.2Appl
ication对象exit.asp<%session.Abandon()%>5.3Server对象Server对象提供对服务器上的方法和属性的访问,其中大
多数方法和属性是作为实用程序的功能服务的。有了Server对象,你就可以在服务器上启动ActiveX对象例程,并使用Ac
tiveServer服务提供象HTML和URL编码这样的函数,ASP许多高级功能都是通过它来完成的。5.3Se
rver对象5.3.1Server对象的属性该属性主要是用来指定一个ASP应用程序在结束前最多可运行多长时间,其设置是以“秒
”为单位,系统的默认值为90秒语法:Server.ScriptTimeout=Seconds5.3Server对象
注意:时间的设置必须放在ASP程序之前,否则不起任何作用。当Web服务器对组件进行处理时,将不会受到此属性的限制。当设置
小于90秒时,以90秒为准。5.3Server对象5.3.2Server对象的方法1、CreateObject方法C
reateObject方法允许客户端创建一个服务器组件的实例,当前ASP程序处理完成后,服务器将自动破坏这些实例对象。这里所说
的服务器组件既可以是ASP内置组件,也可以是第三方提供或是用户自己创建的组件。该方法是Server对象中最常用的一种方法。5
.3Server对象语法:Set对象实例名称=Server.CreateObject(“组件名称”)举例:Set
db=Server.CreateObject("adodb.connection")db.open"数据源名"5.3S
erver对象2、Mappath方法Mappath方法将指定的相对路径或虚拟路径映射成真实的路径,这里所说的虚拟路径指的是W
EB服务器所建立的虚拟路径,真实路径为服务器上相对的物理目录。5.3Server对象语法:Server.Mappath("虚拟路径字符串")举例:<%=Server.Mappath("4-10.asp")%>其作用是输出4-10.asp所对应的物理路径。说明:Mappath方法不支持相对路径语法(.)或(..),但将“\”字符与“/”视为相同。5.3Server对象3、URLEncode方法URLEncode方法将URL编码规则,包括转义字符,应用到指定的字符串中。其作用就是按URL编码规则进行字符串输出。语法:Server.URLEncode(string)参数说明:string为指定要编码的字符串。5.3Server对象实例:<%=Server.URLEncode("http://www.microsoft.com)"%>5.3Server对象4、HTMLEncode方法HTMLEncode方法是对指定的字符串应用HTML编码。语法:Server.HTMLEncode(string)参数说明:string是要指定编码的字符串。实验三:ASP内置对象的使用目的:1、熟练掌握利用Application对象;2、熟练掌握利用Session对象,Server对象。任务:1、利用Session编写程序,当用户登陆时,对用户登陆的数据进行有效性验证,并且一次只允许用户尝试登陆三次。2、实验指导5-1:猜数字游戏3、实验指导5-2:防刷新的计数器4、(选做)编写聊天室程序。第张数据集合属性方法
献花(0)
+1
(本文系暖忆琳首藏)