asp 内置对象 Application 详解

2018-09-06 11:32

阅读:1039

  asp内置对象Application详解

在ASP的内建对象中除了用于发送、接收和处理数据的对象外,还有一些非常实用的代表ActiveServer应用程序和单个用户信息的对象。

让我们先来看看Application对象。在同一虚拟目录及其子目录下的所有.asp文件构成了ASP应用程序。我们非但可以使用Application对象,在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据。而且,Application对象还有控制访问应用层数据的方法和可用于在应用程序启动和停止时触发过程的事件。
下面就让我们一起来学习Application对象。

一、属性

虽然Application对象没有内置的属性,但我们可以使用以下句法设置用户定义的属性也可称为集合。

Application(属性/集合名称)=值

我们可以使用如下脚本声明并建立Application对象的属性。
<%
Application(MyVar)=Hello
SetApplication(MyObj)=Server.CreateObject(MyComponent)
%>


一旦我们分配了Application对象的属性,它就会持久地存在,直到关闭WEB服务器服务使得Application停止。由于存储在Application对象中的数值可以被应用程序的所有用户读取,所以Application对象的属性特别适合在应用程序的用户之间传递信息。
二、方法

Application对象有两个方法,它们都是用于处理多个用户对存储在Application中的数据进行写入的问题

1、Lock方法禁止其他客户修改Application对象的属性。

Lock方法阻止其他客户修改存储在Application对象中的变量,以确保在同一时刻仅有一个客户可修改和存取Application变量。如果用户没有明确调用Unlock方法,则服务器将在.asp文件结束或超时后即解除对Application对象的锁定。

让我们来看看下面这段用Application来记录页面访问次数的程序:
<%
DimNumVisitsNumVisits=0
Application.LockApplication(NumVisits)=Application(NumVisits)+1
Application.Unlock
%>
欢迎光临本网页,你是本页的第<%=Application(NumVisits)%>位访客!


将以上脚本保存在你的.asp文件中,就轻而易举地给你的页面添加了一个计数器。

2、和Lock方法相反,Unlock方法允许其他客户修改Application对象的属性。

在上面的例子中,上述例子中,Unlock方法解除对象的锁定,使得下一个客户端能够增加NumVisits的值。

三、事件

1、Application_OnStart

Application_OnStart事件在首次创建新的会话(即Session_OnStart事件)之前发生。当WEB服务器启动并允许对应用程序所包含的文件进行请求时就触发Application_OnStart事件。Application_OnStart事件的处理过程必须写在Global.asa文件之中。

Application_OnStart事件的语法如下:
<SCRIPTLANGUAGE=ScriptLanguageRUNAT=Server>
SubApplication_OnStart...
EndSub
</SCRIPT>


2、Application_OnEnd

Application_OnEnd事件在应用程序退出时于Session_OnEnd事件之后发生,Application_OnEnd事件的处理过程也必须写在Global.asa文件之中。

下面让我们来看看在使用Application对象时必须注意的一些事项。

不能在Application对象中存储ASP内建对象。例如,下面的每一行都返回一个错误。
<%
SetApplication(var1)=Session
SetApplication(var2)=Request
SetApplication(var3)=Response
SetApplication(var4)=Server
SetApplication(var5)=Application
SetApplication(var6)=ObjectContext
%>


若您将一个数组存储在Application对象中,请不要直接更改存储在数组中的元素。例如,下列的脚本无法运行。
<%Application(StoredArray)(3)=newvalue%>


这是因为Application对象是作为集合被实现的。数组元素StoredArray(3)未获得新的赋值。而此值将包含在Application对象集合中,并将覆盖此位置以前存储的任何信息。建议您在将数组存储在Application对象中时,在检索或改变数组中的对象前获取数组的一个副本。在对数组操作时,您应再将数组全部存储在Application对象中,这样您所做的任何改动将被存储下来。下列的脚本对此进行演示。
---asp8a.asp---
<%
dimMyArray()
RedimMyArray(5)
MyArray(0)=hello
MyArray(1)=someotherstring
Application.Lock
Application(StoredArray)=MyArray
Application.Unlock
Response.Redirectasp8b.asp
%>

---asp8b.asp---
<%
LocalArray=Application(StoredArray)
LocalArray(1)=there
Response.WriteLocalArray(0)&LocalArray(1)
Application.Lock
Application(StoredArray)=LocalArray
Application.Unlock
%>

与Application对象具有相近作用的另一个非常实用的ASP内建对象就是Session。我们可以使用Session对象存储特定的用户会话所需的信息。当用户在应用程序的页之间跳转时,存储在Session对象中的变量不会清除,而用户在应用程序中访问页面时,这些变量始终存在。当用户请求来自应用程序的Web页时,如果该用户还没有会话,则Web服务器将自动创建一个Session对象。当会话过期或被放弃后,服务器将终止该会话。

通过向客户程序发送唯一的Cookie可以管理服务器上的Session对象。当用户第一次请求ASP应用程序中的某个页面时,ASP要检查HTTP头信息,查看是否有在报文中有名为ASPSESSIONID的Cookie发送过来,如果有,则服务器会启动新的会话,并为该会话生成一个全局唯一的值,在把这个值作为新ASPSESSIONIDCookie的值发送给客户端,正是使用这种Cookie,可以访问存储在服务器上的属于客户程序的信息。Session对象最常见的作用就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。另外其还经常被用在鉴别客户身份的程序中。要注意的是,会话状态仅在支持cookie的浏览器中保留,如果客户关闭了Cookie选项,Session也就不能发挥作用了。
一、属性

1、SessionID

SessionID属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识。会话标识以长整形数据类型返回。在很多情况下SessionID可以用于WEB页面注册统计。

2、TimeOut

Timeout属性以分钟为单位为该应用程序的Session对象指定超时时限。如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。

二、方法

Session对象仅有一个方法,就是Abandon,Abandon方法删除所有存储在Session对象中的对象并释放这些对象的源。如果您未明确地调用Abandon方法,一旦会话超时,服务器将删除这些对象。当服务器处理完当前页时,下面示例将释放会话状态。
<%Session.Abandon%>


三、事件

Session对象有两个事件可用于在Session对象启动和释放是运行过程。

1、Session_OnStart事件在服务器创建新会话时发生。服务器在执行请求的页之前先处理该脚本。Session_OnStart事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。

尽管在Session_OnStart事件包含Redirect或End方法调用的情况下Session对象仍会保持,然而服务器将停止处理Global.asa文件并触发Session_OnStart事件的文件中的脚本。

为了确保用户在打开某个特定的Web页时始终启动一个会话,就可以在Session_OnStart事件中调用Redirect方法。当用户进入应用程序时,服务器将为用户创建一个会话并处理Session_OnStart事件脚本。您可以将脚本包含在该事件中以便检查用户打开的页是不是启动页,如果不是,就指示用户调用Response.Redirect方法启动网页。程序如下:

<SCRIPTRUNAT=ServerLanguage=VBScript>
SubSession_OnStart
startPage=/MyApp/StartHere.asp
currentPage=Request.ServerVariables(SCRIPT_NAME)
ifstrcomp(currentPage,startPage,1)then
Response.Redirect(startPage)
endif
EndSub
</SCRIPT>

上述程序只能在支持cookie的浏览器中运行。因为不支持cookie的浏览器不能返回SessionIDcookie,所以,每当用户请求Web页时,服务器都会创建一个新会话。这样,对于每个请求服务器都将处理Session_OnStart脚本并将用户重定向到启动页中。
2、Session_OnEnd事件在会话被放弃或超时发生。

关于使用Session对象需要注意的事项Application对象相近,请参照前文。

会话可以通过以下三种方式启动:

1、一个新用户请求访问一个URL,该URL标识了某个应用程序中的.asp文件,并且该应用程序的Global.asa文件包含Session_OnStart过程。

2、用户在Session对象中存储了一个值。

3、用户请求了一个应用程序的.asp文件,并且该应用程序的Global.asa文件使用<OBJECT>标签创建带有会话作用域的对象的实例。

如果用户在指定时间内没有请求或刷新应用程序中的任何页,会话将自动结束。这段时间的默认值是20分钟。可以通过在Internet服务管理器中设置“应用程序选项”属性页中的“会话超时”属性改变应用程序的默认超时限制设置。应依据您的Web应用程序的要求和服务器的内存空间来设置此值。例如,如果您希望浏览您的Web应用程序的用户在每一页仅停留几分钟,就应该缩短会话的默认超时值。过长的会话超时值将导致打开的会话过多而耗尽您的服务器的内存资源。对于一个特定的会话,如果您想设置一个小于默认超时值的超时值,可以设置Session对象的Timeout属性。例如,下面这段脚本将超时值设置为5分钟。
<%Session.Timeout=5%>

当然你也可以设置一个大于默认设置的超时值,Session.Timeout属性决定超时值。你还可以通过Session对象的Abandon方法显式结束一个会话。例如,在表格中提供一个“退出”按钮,将按钮的ACTION参数设置为包含下列命令的.asp文件的URL。
<%Session.Abandon%>



评论


亲,登录后才可以留言!