解析ASP的Application和Session对象 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
在已经发表的系列文章中我们已经讨论了两个ASP对象:Application对象和Session对象,因此能够访问Application对象和Session对象提供的集合、方法、属性和事件。本节将从程序设计的角度对这两个对象进行研究。 · 当载入ASP DLL并响应对一个ASP网页的第一个请求时,创建Application对象。该对象提供一个存储场所,用来存储对于所有访问者打开的所有网页都可用的变量和对象。 · 当访问者首次从站点请求一个ASP页面时,为他创建一个Session对象,并保持有效直到缺省的超时周期(或由脚本确定的超时周期)。该对象提供一个存储场所,用来存储仅仅对该访问者在会话的活动期间打开的网页可用的变量和对象。 关系 1、ASP的Application对象成员概述 本节说明Application对象的集合、方法和事件(Application对象没有属性)。在下一节对Session对象(具有属性)进行同样的说明。然后将继续探讨使用这些对象所完成的任务,更详细地说明每个对象的各成员如何进行工作。 1. Application对象的集合 Application对象提供了两个集合,可以用来访问存储于全局应用程序空间中的变量和对象。集合及说明如下所示: 表Application对象的集合及说明
2. Application对象的方法 Application对象的方法允许删除全局应用程序空间中的值,控制在该空间内对变量的并发访问。方法及说明如下表所示: 表Application对象的方法及说明
注意,在运行期间不能从Application.StaticObjects集合中删除变量。 3. Application对象的事件 Application对象提供了在它启动和结束时触发的两个事件,如下表所示: 表Application对象的事件及说明
ASP的Session对象成员概述 本节概述Session对象的所有成员。 1. Session对象的集合 Session对象提供了两个集合,可以用来访问存储于用户的局部会话空间中的变量和对象。这些集合及说明如下表所示: 表 Session对象的集合及说明
2. Session对象的特性 Session对象提供了四个属性。这些属性及说明如下表所示: 表3-7 Session对象的属性及说明
3. Session对象的方法 Session对象允许从用户级的会话空间删除指定值,并根据需要终止会话。Seesion对象的方法及说明如下表所示: 表Session对象的方法及说明
4. Session对象的事件 Session对象提供了在启动和结束时触发的两个事件,如表3-9所示: 表3-9 Session对象的事件及说明
使用Application和Session的事件 ASP的Application和Session对象体现了其他ASP内置对象所没有的特征——事件。然而,正像在前面的对象成员表中看到的那样,这些都是ASP会话和应用程序的工作相联系的事件。 1. Application和Session的事件处理器 每当一个应用程序或会话启动或结束时,ASP触发一个事件。可以通过在一个特殊的文件中编写普通的脚本代码来检测和应答这些事件,这个文件名为global.asa,位于一个应用程序的根目录中(对于缺省的Web网站是\InetPub\WWWRoot目录,或是作为一个实际应用程序定义的一个文件夹)。这个文件可以包含一个或多个HTML的<OBJECT>元素,用于创建将在该应用程序或用户会话内使用的组件实例。 下面的代码是global.asa文件的一个例子。我们只关注<OBJECT>元素以及以Set关键字开始的那些代码行:
因为这个global.asa文件用于本章中的示例页面,所以将需要将该文件放到Web网站的根目录中,或者放到已配置为一个虚拟应用程序的目录中,并且在该目录中包含有其他示例文件。 读取和存储值 注意上面的例子怎样读取Application和Session的变量,与在Request和Response对象的集合中所采取的方式相同。设置这些变量的值:
获取这些变量的值:
当然,对于Session对象可采取同样的方法。 可以看到,当从一个Session事件处理器访问时,怎样“锁定”(Lock)和“解锁”(unlock)该Application对象;当从一个ASP网页访问时,需要进行相同的处理。用Application事件内的代码访问Application对象中的值时,不要求这么做。这是因为在任何应用程序中只有一个Application对象的实例,并且其事件处理器的代码只在没有活动的用户会话时进行。 也可以看到一个基本的用户会话计数器是如何实现的。这里使用一个应用程序级的变量Visit_count,当新的会话启动时它就自动增加。 一般也不限制简单地把值保存到Application或Session对象中。例如,Web开发者的Web站点在http://webdev.wrox.co.uk上,有相应的一个global.asa文件,当一个新的会话启动时该文件就在服务器上的数据库中写入相应的条目,数据细节从Request.ServerVariables集合中获取。这提供了一个基本的方法统计访问者的数量,并收集访问者的一些基本信息。
|