用ASP编写虚拟社区、上购物等程序时,Application和Session目标具有无足轻重的效果,能够灵敏合理地运用这两个目标是进步程序质量的要害。下面让笔者依据自己在这方面的经历,向我们深化介绍一下ASP的这两个内建目标。
一、Application目标的成员概述
Application目标成员包含Application目标的调集、办法和事情。
⒈Application目标的调集
Contents调集:没有运用
StaticObjects:运用
例:在default.asp中有如下赋值
application(a)=a
application(b)=128
application(c)=false
则有contents调集
application.contents(1)=a'也可写为application.contents(a)=a
application.contents(2)=128'也可写为application.contents(b)=128
application.contents(3)=false'也可写为application.contents(c)=false
在此笔者引荐你在调用时运用类如application.contents(a)的办法,企业软文"由于这样更为直观,假如用序号来表明的话则要考虑赋值的先后顺序。
⒉Application目标的办法
Contents.Remove(变量名):从Application.Contents调集中删去指定的变量
Contents.RemoveAll():把Application.Contents调集中的一切变量删去
Lock():确定Application目标,使得只要当时的ASP页对内容能进行拜访
Unlock():免除对Application目标的确定
例:在default.asp中:
application(a)=a
application(b)=128
application(c)=false
response.writeapplication.contents(1)&
response.writeapplication.contents(2)&
response.writeapplication.contents(3)&
response.writeAfterRemoveb:
application.contents.remove(b)
response.writeapplication.contents(1)&
response.writeapplication.contents(2)&
履行成果:
a
128
False
AfterRemoveb:
a
False
假如要删去调集中一切变量用application.contents.removeall即可,至于Lock和Unlock办法在实践中常常用到,读者也比较了解,在此就不在负担。
⒊Application目标事情
OnStart:第一个拜访服务器的用户第一次拜访某一页面时发生
OnEnd:当最终一个用户的会话现已完毕而且该会话的OnEnd事情一切代码现已履行完毕后发生,或最终一个用户拜访服务器一段时刻(一般为20分钟)后依然没有人拜访该服务器发生。
想要界说application目标的OnStart和OnEnd事情里做什么需要将代码写在Global.asa这个文件里(下文有举例),而且将该文件放在站点的根目录下(一般是Inetpub\wwwroot\)
二、Session目标的成员概述
Session目标的成员比Application目标多一项特点,即:调集、特点、办法、事情
⒈Session目标的调集
Contents:没有运用
StaticObject:运用
例:在default.asp中有如下赋值
session(a)=a
session(b)=128
session(c)=false
则有contents调集
session.contents(1)=a'也可写为session.contents(a)=a
session.contents(2)=128'也可写为session.contents(b)=128
session.contents(3)=false'也可写为session.contents(c)=false
⒉Session目标的特点
CodePage:可读/可写。整型。界说用于在浏览器中显现页内容的代码页。代码页是字符集的数字值,不同的言语运用不同的代码页。例如,ANSI代码页为1252,日文代码页为932,简体中文代码页为936。
LCID:可读/可写。整型。界说发送给浏览器的页面区域标识。LCID是仅有地标识区域的一个国际标准缩写,整站优化"例如,2057界说当时区域的钱银符号是£。
SessionID:只读。长整型。回来本会话的会话标识符。每创立一个会话,由服务器主动分配一个标识符。能够依据它的值判别两个用户是谁先拜访服务器。
Timeout:可读/可写。整型。为会话界说以分钟为单位的超时限制。假如用户在这个时刻内没有改写或恳求任何一个页,则该用户发生的会话主动完毕。缺省值是20。
以上特点在实践运用中效果不大,品牌营销策划"而且基本上不需要怎样修正,这几个特点也没什么特别的当地。
⒊Session目标的办法
Contents.Remove(变量名):从Session.contents调集中删去指定的变量
Contents.Removeall():删去Session.contents调集中的一切变量
Abandon():完毕当时用户会话而且吊销当时Session目标。
Session目标的Contents.Remove(变量名)和Contents.Removeall()办法与Application目标的基本上没什么差异,为协助了解,我们能够参照上面的比如将Application改为Session。这儿要阐明一下的是Contents.Removeall()和Abandon()的差异,履行这两个办法都会开释当时
用户会话的一切Session变量,不同的是Contents.Removeall()单纯地开释Session变量的值而不停止当时的会话,而Abandon()除了开释Session变量外还会停止会话引发Session_OnEnd事情,期望我们留意两者的差异。
⒋Session目标的事情
OnStart:当ASP用户会话发生时触发,一旦有任一用户对本服务器恳求任一页面即发生该事情。
OnEnd:当ASP用户会话完毕时触发,当运用Abandon()办法或超时也会触发该事情。
这两个事情和Application的OnStart、OnEnd事情相同,也是有必要放在Global.asa文件里,下
面就要点和我们研究一下这四个事情的运用。
三、Global.asa
ASP的Application和Session目标表现了其他ASP内置目标所没有的特征--事情。每一个访客拜访服务器时都会触发一个OnStart事情(第一个访客会一起触发Application和Session的OnStart事情,但Application先于Session),每个访客的会话完毕时都会触发一个OnEnd事情(最终一个访客会话完毕时会一起触发Application和Session的OnEnd事情,但Session先于Application)。
OnStart和OnEnd这两个事情一般运用在虚拟社区中计算在线人数、修正用户的在线离线状况等。要具体界说这两个事情,需要将代码写在Global.asa文件,并将该文件放在站点的根目录下(缺省是\Inetpub\wwwroot\)。别的,Application和Session目标规则了在OnEnd事情里除了Application目标外其他ASP内置目标(Response、Request、Server、Session...)一概不能运用。以下举一个虚拟社区计算在线人数的比如来阐明怎么运用这两个事情。
文件阐明:
global.asa坐落d:\Inetpub\wwwroot\目录下
default.asp坐落d:\Inetpub\wwwroot\目录下,虚拟社区登录页面
login.asp坐落d:\Inetpub\wwwroot\目录下,用于检测用户输入的用户名及暗码
index.asp坐落d:\Inetpub\wwwroot\目录下,虚拟社区主页
bbs.mdb坐落d:\Inetpub\wwwroot\目录下,存储用户信息的数据库
数据库(ACCESS)结构:
===bbs表===
id用户ID,长整型
name用户名,文本型
code暗码,文本型
online在线状况,是/否
===global.asa===
<scriptLANGUAGE=VBScriptRUNAT=Server>
SubApplication_OnStart
application(online)=0
EndSub
subApplication_OnEnd
ndSub
SubSession_OnStart
EndSub
SubSession_OnEnd
ifsession.contents(pass)pen'判别是否为登录用户的Session_OnEnd
application.lock
application(online)=application(online)-1
application.unlock
endif
EndSub
</script>
==============
===login.asp===
......'暗码验证,衔接数据库,检测用户输入的用户名及暗码是否正确
if暗码验证经过pen
session(name)=rs(name)
session(id)=rs(id)
session(pass)=true
else
rs.close
conn.close
response.write暗码过错!
response.end
endif
application.lock
application(online)=application(online)+1
conn.Execute(updatebbssetonline=1whereid=&session(id))'将用户的状况设为在线
application.unlock
rs.close
conn.close
response.redirectindex.asp'初始化数据后跳转到社区主页
===========
在本例中,用application(online)变量记载现已登录社区的在线人数,由于一旦有用户拜访服务器而不论用户是否登录,都会发生OnStart事情,所以不能在OnStart事情里使Applicaiton(online)加一。由于不论是否是登录用户的会话完毕都会发生OnEnd事情(假如有访客拜访了服务器但并不登录社区,他的会话完毕后也会发生OnEnd事情),所以在Session_OnEnd事情里用了句if句子来判别是否为已登录用户的OnEnd事情,假如是才将在线人数减一。
这只是一个计算在线人数的简略比如,关于一个完好的虚拟社区来说,只是计算有多少人在线是不行的,在本例中数据库里有个online字段是用来记载用户的在线状况,用户登录的时分,在login.asp里将online设为1,但用户离线时并没有将online设为0,要完善它,就要修正一下Session_OnEnd事情,在该事情里将online设为0。
===global.sas===
<scriptLANGUAGE=VBScriptRUNAT=Server>
SubApplication_OnStart
application(online)=0
setapplication(conn)=Server.CreateObject(ADODB.Connection)
application(db)=Server.MapPap(\bbs.mdb)'此处最好运用肯定路径\bbs.mdb,下文有具体介绍
EndSub
subApplication_OnEnd
setapplication(conn)=noping
EndSub
SubSession_OnStart
EndSub
SubSession_OnEnd
ifsession.contents(pass)pen'判别是否为登录用户的Session_OnEnd
application(con).open=driver={MicrosoftAccessDriver(*.mdb)};dbq=&application(db)
application.lock
application(online)=application(online)-1
application(con).Execute(updatefriendssetonline=0whereid=&session.contents(id))
application.unlock
application(con).close
endif
EndSub
</script>
==============
至此,完好的代码现已完成了。由于在Application和Session的OnEnd事情里不能运用Server目标,所以要将数据库的衔接及数据库在服务器上的物理地址(d:\inetpub\wwwroot\bbs.mdb)存储在application变量中,并在Application_OnStart事情中预先处理。同理,在Session_OnEnd事情中不能用session(pass)来替代session.contents(pass)(以下有翔实阐明)。
四、本文实例中值得引起留意的两点
⒈OnEnd事情里的session.contents
刚开始触摸global.asa的朋友常常会将上面Session_OnEnd事情里的
ifsession.contents(pass)pen写成
ifsession(pass)pen,
这样的话体系不会提示过错,可是永久也不会履行pen后边的内容,这是由于在OnEnd事情里制止运用Session目标,可是能够用Session目标的调集来调用session变量。由于IIS并没提示任何过错信息,所以笔者从前在这上面浪费了许多时刻。在此期望我们引以为鉴!
⒉Application_OnStart事情里用Server.MapPap获取数据库的物理地址时应运用肯定地址为了阐明这个问题,我们能够做个试验:将上面Application_OnStart事情里的
application(db)=Server.MapPap(\bbs.mdb)改为:
application(db)=Server.MapPap(bbs.mdb)
然后在d:\inetpub\wwwroot\目录下树立一个test子目录,写一个temp.asp在test目录里。
====test.asp====
<%response.writeapplication(db)%>
================
再将temp.asp复制一份放在根目录下(d:\inetpub\wwwroot\)。用记事本翻开global.asa,再翻开两个浏览器,浏览器A输入地址://localhost/temp.asp,按回车,将在浏览器上输出:
d:\inetpub\wwwroot\bbs.mdb
然后,在记事本的窗口上点文件菜单,选保存(使global.asa的修正时刻改动,从而使IIS重启动一切服务),再在浏览器B输入地址://localhost/test/temp.asp,按回车,在浏览器上输出的是:
d:\inetpub\wwwroot\test\bbs.mdb
global.asa文件虽然是放在站点根目录下,可是假如在server.mappap中运用的是相对地址,而触发Application_OnStart事情的用户第一次拜访的页面又不是归于根目录的话,得到数据库的物理地址将不会是期望的成果,期望我们要特别当心。
,文章来自:络营销蜓云tingclouds