深入研究Application和Session对象
上一篇 / 下一篇 2007-04-13 16:55:16 / 个人分类:ASP
51Testing软件测试网w e1I,c:ba8N%\(e 用ASP编写虚拟社区、网上购物等程序时,Application和Session对象具有举足轻重的作用,能够灵活合理地运用这两个对象是提高程序质量的关键。下面让笔者根据自己在这方面的经验,向大家深入介绍一下ASP的这两个内建对象。51Testing软件测试网 e-W{Sy l!@(g7wm o{d(MbF0 一、Application对象的成员概述 P8tQ` hP051Testing软件测试网+@+[n^;|4W0x K6x.X(i Application对象成员包括Application对象的集合、方法和事件。51Testing软件测试网*G R;L6}1lYz "w8u1O;pS0 ⒈Application对象的集合51Testing软件测试网(oy#GJa7W1Z4z 51Testing软件测试网U`.w*|2}J,Jr Contents集合:没有使用<OBJECT>元素定义的存储于Applicaiton对象中的所有变量的集合51Testing软件测试网 K#V'ck!mIh_ y%n _|%q8I7P;eekK0 StaticObjects:使用<OBJECT>元素定义的存储于Application对象中的所有变量 的集合 &D*U+LyX} d051Testing软件测试网9NPn&n l N6VL 例:在default.asp中有如下赋值51Testing软件测试网&U2Q O!^iY Z8l7L-V"jsd`Vt'i0 application("a")="a" +Lw%[@!A8^N7wa051Testing软件测试网JDBm b2q application("b")=128 Qxl2J@O0e.E0m051Testing软件测试网1R%`FzhqcS application("c")=false 9uOwe0S051Testing软件测试网z*n:cj+p 则有contents集合 3KX$A1wyxKV051Testing软件测试网'_"f1A8w'o+O;g~ application.contents(1)="a" '也可写为application.contents("a")="a" -jk,c&m2xL/f051Testing软件测试网b&h6@,R9Z application.contents(2)=128 '也可写为application.contents("b")=12851Testing软件测试网2dEcyU+U;x1M $YT xu\0 application.contents(3)=false '也可写为application.contents("c")=false 2[sr[o#sI0 .a;mx;Z'[d0 在此笔者推荐你在调用时使用类如application.contents("a")的方法,因为这样更为直观,如果用序号来表示的话则要考虑赋值的先后顺序。 *@'xtZG7vIL051Testing软件测试网V8xw;q(Sq ⒉Application对象的方法51Testing软件测试网Ks,V/g,]jFp 51Testing软件测试网G*b$H}7CWe Contents.Remove("变量名"):从Application.Contents集合中删除指定的变量51Testing软件测试网+Q5YN3v*L4O\ 51Testing软件测试网a5M:v-C^;j;r9w Contents.RemoveAll() :把Application.Contents集合中的所有变量删除51Testing软件测试网Q:B.oD~0F ?.l"L fh$p(z!M0 Lock() :锁定Application对象,使得只有当前的ASP页对内容能进行访问51Testing软件测试网N#x'ua,[ RP F,z4E2B ])\:E(i0 Unlock() :解除对Application对象的锁定 @)U%x U@+T(~7u0 Iehl8]JOIN)y0 例:在default.asp中:51Testing软件测试网1q)X)\K:D%ID*ST%n #Ox+ls(p1P0 application("a")="a"51Testing软件测试网,p6k x\#R!^1z ^4W 51Testing软件测试网(|7V9eU5jl7}5dc r application("b")=12851Testing软件测试网/O*XYmTL}%x l]@ _gI`!?#Y.L}7R0 application("c")=false Q|(Un;Z(N,n"n051Testing软件测试网 E ]|7PlQ0o response.write application.contents(1)&"<br>"51Testing软件测试网 HnG`2Gm "] X \ i;[@~J0 response.write application.contents(2)&"<br>"51Testing软件测试网/C&cuOm9~$KTX*I &fw$]E7M1ww0 response.write application.contents(3)&"<br>"51Testing软件测试网UA}O+p!f 51Testing软件测试网2[j3B!}V\,kp response.write "After Remove b:"51Testing软件测试网E g*Dc3][%e5B 51Testing软件测试网p4dE?5S application.contents.remove("b") F,}if%d;Vl[0 +RtE)\5K0 response.write application.contents(1)&"<br>" fL0b&H"})_1pv0 H'ft!iv%t2X!Is/|8v0 response.write application.contents(2)&"<br>"51Testing软件测试网\c:ALMh 51Testing软件测试网*ZM$g)e@ A-f 执行结果:51Testing软件测试网Zn` `@yf-F1GZ#t Gv6~S4dmp&uNZ0 a +d'gEHg1@0 O%kEg^vF.G XFO0 12851Testing软件测试网^1|uh-A+S -N)~y3v:M.b,[0 False51Testing软件测试网N.Pt6K/`"J,~,^:VL ijJ9xR){r3f0 After Remove b:51Testing软件测试网5` i!C_d f 51Testing软件测试网/^"Q ~c:V.c a51Testing软件测试网:ty4la'QC+YPA {xr;Nf Iq0 False51Testing软件测试网 h2@)~3|$c@Yu | R }:KK3m*\*@0 如果要删除集合中所有变量用application.contents.removeall即可,至于Lock和Unlock方法在实际中经常用到,读者也比较熟悉,在此就不在累赘。 ci'_&N5} bo ^0 _[!Tcw1K$e&S?"}Z(y}0 ⒊Application对象事件51Testing软件测试网 G-i6x(E` -H Ww l!VCq3?A0 OnStart:第一个访问服务器的用户第一次访问某一页面时发生51Testing软件测试网0}#{U;ma"Be&G%b #}.m#y/K"f)ck0 OnEnd :当最后一个用户的会话已经结束并且该会话的OnEnd事件所有代码已经执行完毕后发生,或最后一个用户访问服务器一段时间(一般为20分钟)后仍然没有人访问该服务器产生。51Testing软件测试网}6nH U&Ui.S1Q 51Testing软件测试网q gw8s5a 想要定义application对象的OnStart和OnEnd事件里做什么需要将代码写在Global.asa这个文件里(下文有举例),并且将该文件放在站点的根目录下(一般是Inetpub\wwwroot\) }$Q zg'd,G$W%L?G:o0 R%_^l Dc;n)G.}0 二、Session对象的成员概述51Testing软件测试网5T{5?B:|w-[:J.Jo 51Testing软件测试网3r2qAM4K(J@ Session对象的成员比Application对象多一项属性,即:集合、属性、方法、事件51Testing软件测试网#N6Wi:XsbA 2e3E%G6MQ!MT"u0 ⒈Session对象的集合51Testing软件测试网h:i5EH/tpD sTy7P4m!Vb L0 Contents :没有使用<OBJECT>元素定义的存储于特定Session对象的所有变量的集合。 J\\7BN K051Testing软件测试网AW.x4T0Av/C StaticObject:使用<OBJECT>元素定义的、存储于Session对象中的所有变量的集合。51Testing软件测试网%Ooq9t*jS d(SY:c:o"gEI0 例:在default.asp中有如下赋值51Testing软件测试网VNj8t.P&K ir)n+si\$_8R|{!J0 session("a")="a"51Testing软件测试网1EZ R9EJm;] 51Testing软件测试网.p0UG"Mi4c#o2n;l session("b")=128 +D6j g/|0{/q*\P051Testing软件测试网9Q7uU!I*~"pv#K session("c")=false "t-N!y_#yXT$_0 Bb,gQ2wks6?0 则有contents集合 #tE@,Ln S"S051Testing软件测试网(s.V} Tq0mC? session.contents(1)="a" '也可写为session.contents("a")="a" ]q1vOT!^%w051Testing软件测试网f'H9a[_6U session.contents(2)=128 '也可写为session.contents("b")=12851Testing软件测试网Z?%pU7`W 51Testing软件测试网:Y ~ |0HCS Z session.contents(3)=false '也可写为session.contents("c")=false51Testing软件测试网6Z vq5Z vbd (Wfd%K$o'OWB ki0 ⒉Session对象的属性51Testing软件测试网l"`+f*V(W8u#u9n ]D:`)J6d\jF1Gx0 CodePage: 可读/可写。整型。定义用于在浏览器中显示页内容的代码页。代码页是字符集的数字值,不同的语言使用不同的代码页。例如,ANSI代码页为1252,日文代码页为932,简体中文代码页为936。 k9`V:d$fT0 n.w'V~h5f ` ?&K0 LCID : 可读/可写。整型。定义发送给浏览器的页面地区标识。LCID是唯一地标识地区的一个国际标准缩写,例如,2057定义当前地区的货币符号是"£"。51Testing软件测试网qm5qG/c 51Testing软件测试网 Gp(A+eql2d nM SessionID: 只读。长整型。返回本会话的会话标识符。每创建一个会话,由服务器自动分配一个标识符。可以根据它的值判断两个用户是谁先访问服务器。 a]R}c8R051Testing软件测试网TV+n6N4s5iP Timeout : 可读/可写。整型。为会话定义以分钟为单位的超时限定。如果用户在这个时间内没有刷新或请求任何一个网页,则该用户产生的会话自动结束。缺省值是20。51Testing软件测试网(G Rwm3HY,t%| 8ehk5E&Wt/}Ib_0以上属性在实际应用中作用不大,而且基本上不需要怎么修改,这几个属性也没什么特殊的地方。 C WA~jf0 *~)b-c!L1y(d0 ⒊Session对象的方法 #b @$jCK`(BX0 3Ak;Fm @$`E0 Contents.Remove("变量名"): 从Session.contents集合中删除指定的变量 ] Y8an"J7dH0 dN ]&F4V7V [0 Contents.Removeall() : 删除Session.contents集合中的所有变量 BsP{+mj-` i0 1Xh;Wl#w [@ C%Z~0 Abandon() : 结束当前用户会话并且撤消当前Session对象。 +]}o2_*BVh@oE/R:w051Testing软件测试网i7U?wq Session对象的Contents.Remove("变量名")和Contents.Removeall()方法与Application对象的基本上没什么区别,为帮助理解,大家可以参照上面的例子将Application改为Session。这里要说明一下的是Contents.Removeall()和Abandon()的区别,执行这两个方法都会释放当前 (I1s%dZ RmV051Testing软件测试网J#KXPmEIwq @(w 用户会话的所有Session变量,不同的是Contents.Removeall()单纯地释放Session变量的值而不终止当前的会话,而Abandon()除了释放Session变量外还会终止会话引发Session_OnEnd事件,希望大家注意两者的区别。51Testing软件测试网c,DW\pY j 51Testing软件测试网C4hW'ww xb8T9d ⒋Session对象的事件51Testing软件测试网+e@_ h3W_6CaW x oQ@.A0 OnStart: 当ASP用户会话产生时触发,一旦有任一用户对本服务器请求任一页面即产生该事件。 @5A+hG4k0 ,e!vfX'z A0 OnEnd : 当ASP用户会话结束时触发,当使用Abandon()方法或超时也会触发该事件。51Testing软件测试网*e&K3]AVZT |