分享
 
 
 

解析ASP的Application和Session对象

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

在已经发表的系列文章中我们已经讨论了两个ASP对象:Application对象和Session对象,因此能够访问Application对象和Session对象提供的集合、方法、属性和事件。本节将从程序设计的角度对这两个对象进行研究。

· 当载入ASP DLL并响应对一个ASP网页的第一个请求时,创建Application对象。该对象提供一个存储场所,用来存储对于所有访问者打开的所有网页都可用的变量和对象。

· 当访问者首次从站点请求一个ASP页面时,为他创建一个Session对象,并保持有效直到缺省的超时周期(或由脚本确定的超时周期)。该对象提供一个存储场所,用来存储仅仅对该访问者在会话的活动期间打开的网页可用的变量和对象。

关系

1、ASP的Application对象成员概述

本节说明Application对象的集合、方法和事件(Application对象没有属性)。在下一节对Session对象(具有属性)进行同样的说明。然后将继续探讨使用这些对象所完成的任务,更详细地说明每个对象的各成员如何进行工作。

1. Application对象的集合

Application对象提供了两个集合,可以用来访问存储于全局应用程序空间中的变量和对象。集合及说明如下所示:

表Application对象的集合及说明

集 合

说 明

Contents

没有使用<OBJECT>元素定义的存储于Application对象中的所有变量(及它们的值)的一个集合。包括Variant数组和Variant类型对象实例的引用

StaticObjects

使用<OBJECT>元素定义的存储于Application对象中的所有变量(及它们的值)的一个集合

2. Application对象的方法

Application对象的方法允许删除全局应用程序空间中的值,控制在该空间内对变量的并发访问。方法及说明如下表所示:

表Application对象的方法及说明

方 法

说 明

Contents.Remove(“variable_name”)

从Application.Content集合中删除一个名为variable_name的变量

Contents.RemoveAll()

从Application.Content集合中删除所有变量

Lock()

锁定Application对象,使得只有当前的ASP页面对内容能够进行访问。用于确保通过允许两个用户同时地读取和修改该值的方法而进行的并发操作不会破坏内容

Unlock()

解除对在Application对象上的ASP网页的锁定

注意,在运行期间不能从Application.StaticObjects集合中删除变量。

3. Application对象的事件

Application对象提供了在它启动和结束时触发的两个事件,如下表所示:

表Application对象的事件及说明

事 件

说 明

OnStart

当ASP启动时触发,在用户请求的网页执行之前和任何用户创建Session对象之前。用于初始化变量、创建对象或运行其他代码

OnEnd

当ASP应用程序结束时触发。在最后一个用户会话已经结束并且该会话的OnEnd事件中的所有代码已经执行之后发生。其结束时,应用程序中存在的所有变量被取消

ASP的Session对象成员概述

本节概述Session对象的所有成员。

1. Session对象的集合

Session对象提供了两个集合,可以用来访问存储于用户的局部会话空间中的变量和对象。这些集合及说明如下表所示:

表 Session对象的集合及说明

集 合

说 明

Contents

存储于这个特定Session对象中的所有变量和其值的一个集合,并且这些变量和值没有使用<OBJECT>元素进行定义。包括Variant数组和Variant类型对象实例的引用

StaticObjects

通过使用<OBJECT>元素定义的、存储于这个Session对象中的所有变量的一个集合

2. Session对象的特性

Session对象提供了四个属性。这些属性及说明如下表所示:

表3-7 Session对象的属性及说明

属 性

说 明

CodePage

读/写。整型。定义用于在浏览器中显示页内容的代码页(Code Page)。代码页是字符集的数字值,不同的语言和场所可能使用不同的代码页。例如,ANSI代码页1252用于美国英语和大多数欧洲语言。代码页932用于日文字

LCID

读/写。整型。定义发送给浏览器的页面地区标识(LCID)。LCID是唯一地标识地区的一个国际标准缩写,例如,2057定义当前地区的货币符号是’£’。LCID也可用于FormatCurrency等语句中,只要其中有一个可选的LCID参数。LCID也可在ASP处理指令<%…%>中设置,并优先于会话的LCID属性中的设置。本章后面提供一个ASP处理指令的列表

SessionID

只读。长整型。返回这个会话的会话标识符,创建会话时,该标识符由服务器产生。只在父Application对象的生存期内是唯一的,因此当一个新的应用程序启动时可重新使用

Timeout

读/写。整型。为这个会话定义以分钟为单位的超时周期。如果用户在超时周期内没有进行刷新或请求一个网页,该会话结束。在各网页中根据需要可以修改。缺省值是10min。在使用率高的站点上该时间应更短

3. Session对象的方法

Session对象允许从用户级的会话空间删除指定值,并根据需要终止会话。Seesion对象的方法及说明如下表所示:

表Session对象的方法及说明

方 法

说 明

Contents.Remove(“variable_name”)

从Session.Content集合中删除一个名为variable_name的变量

Contents.RemoveAll()

从Session.Content集合中删除所有变量

Abandon()

当网页的执行完成时,结束当前用户会话并撤消当前Session对象。但即使在调用该方法以后,仍可访问该页中的当前会话的变量。当用户请求下一个页面时将启动一个新的会话,并建立一个新的Session对象(如果存在的话)

注意,在运行期间不能从Session.StaticObjects集合中删除变量。

4. Session对象的事件

Session对象提供了在启动和结束时触发的两个事件,如表3-9所示:

表3-9 Session对象的事件及说明

事 件

说 明

OnStart

当ASP用户会话启动时触发,在用户请求的网页执行之前。用于初始化变量、创建对象或运行其他代码。

OnEnd

当ASP用户会话结束时触发。从用户对应用程序的最后一个页面请求开始,如果已经超出预定的会话超时周期则触发该事件。当会话结束时,取消该会话中的所有变量。在代码中使用Abandon方法结束ASP用户会话时,也触发该事件

使用Application和Session的事件

ASP的Application和Session对象体现了其他ASP内置对象所没有的特征——事件。然而,正像在前面的对象成员表中看到的那样,这些都是ASP会话和应用程序的工作相联系的事件。

1. Application和Session的事件处理器

每当一个应用程序或会话启动或结束时,ASP触发一个事件。可以通过在一个特殊的文件中编写普通的脚本代码来检测和应答这些事件,这个文件名为global.asa,位于一个应用程序的根目录中(对于缺省的Web网站是\InetPub\WWWRoot目录,或是作为一个实际应用程序定义的一个文件夹)。这个文件可以包含一个或多个HTML的<OBJECT>元素,用于创建将在该应用程序或用户会话内使用的组件实例。

下面的代码是global.asa文件的一个例子。我们只关注<OBJECT>元素以及以Set关键字开始的那些代码行:

<!-- Declare instance of the ASPCounter component

with application-level scope //-->

<OBJECT ID=”ASPCounter” RUNAT=”Server” SCOPE=”Application”

PROGID=”MSWC.Counters”>

</OBJECT>

<!-- Declare instance of the ASPContentLimk component

with session-level scope //-->

<OBJECT ID=”ASPContentLink” RUNAT=”Server” SCOPE=”Session”

PROGID=”MSWC.NextLink”>

</OBJECT>

<SCRIPT LANGUAGE=”VBScript” RUNAT=”Server”>

Sub Application_onStart()

‘Create an instance of an ADO Recordset with application-level scope

Set Application(“ADOConnection”)= Server.CreateObject(“ADODB.Connection”)

Dim varArray(3) ‘Create a Variant array and fill it

VarArray(0) = “This is a”

VarArray(1) = “Variant array”

VarArray(2) = “stored in the”

VarArray(3) = “Application object”

Application(“Variant_Array”) = varArray‘Store it in the Application

Application(“Start_Time”) = CStr(Now) ‘Store the date/time as a string

Application(“Visit_Count”) = 0 ‘Set Counter variable to zero

End Sub

Sub Application_onEnd()

Set Application(“ADOConnection”) = Nothing

End Sub

Sub Sesson_onStart()

‘Create an instance of the AdRotator component with session-level scope

Set Session(“ASPAdRotator”) = Server.CreateObject(“MSWC.AdRotator”)

Dim varArray(3) ‘Create a Variant arry and fill it

VarArray(0) = “This is a”

VarArray(1) = “Variant array”

VarArray(2) = “stored in the”

VarArray(3) = “Session object”

Session(“Variant_Array”) = varArray ‘Store it in the Session

Session(“Start_Time”) = CStr(Now) ‘Store the date/time as a string

‘We can access the contents of the Request and Response in a Session_onStart

‘event handler for the page that initiated the session. This is the *only*

‘place that the ASP page context is available like this.

‘as an example, we can get the IP address of the user:

Session(“Your_IP_Address”) = Request.ServerVariables(“REMOTE_ADDR”)

Application.Lock

intVisits = Application(“Visit_Count”) +1

Application(“Visit_Count”) = intVisits

Application.Unlock

End Sub

Sub Session_onEnd()

Set Session(“ASPAdRotator”) = Nothing

End Sub

</SCRIPT>

因为这个global.asa文件用于本章中的示例页面,所以将需要将该文件放到Web网站的根目录中,或者放到已配置为一个虚拟应用程序的目录中,并且在该目录中包含有其他示例文件。

读取和存储值

注意上面的例子怎样读取Application和Session的变量,与在Request和Response对象的集合中所采取的方式相同。设置这些变量的值:

Application(“variable_name”) = variable_value

Application(“variable_name”) = variant_array_variable_name

Set Application(“variable_name”) = object_reference

获取这些变量的值:

variable_value = Application(“variable_name”)

variant_array_variable = Application(“variable_name”)

Set object_reference = Application(“variable_name”)

当然,对于Session对象可采取同样的方法。

可以看到,当从一个Session事件处理器访问时,怎样“锁定”(Lock)和“解锁”(unlock)该Application对象;当从一个ASP网页访问时,需要进行相同的处理。用Application事件内的代码访问Application对象中的值时,不要求这么做。这是因为在任何应用程序中只有一个Application对象的实例,并且其事件处理器的代码只在没有活动的用户会话时进行。

也可以看到一个基本的用户会话计数器是如何实现的。这里使用一个应用程序级的变量Visit_count,当新的会话启动时它就自动增加。 一般也不限制简单地把值保存到Application或Session对象中。例如,Web开发者的Web站点在http://webdev.wrox.co.uk上,有相应的一个global.asa文件,当一个新的会话启动时该文件就在服务器上的数据库中写入相应的条目,数据细节从Request.ServerVariables集合中获取。这提供了一个基本的方法统计访问者的数量,并收集访问者的一些基本信息。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有