热门文章
 
ASP内建对象Server
Global.asa文件的使
ASP内建对象Applica
访问和更新Cookies集合
Asp:Cookie集合 简
asp中cookie使用示例
Asp:Cookie集合简介
遍历cookies的方法
判断cookie是否开启
cookies读写基本例子
 推荐文章
 
ASP Session 对象
松子谈asp的Request
再总结一下asp重定向的方法
asp:Session St
session的使用与性能:
asp session 使用
asp中session具体是
防止ASP Session丢
Asp提高首页性能的一个技巧
ASP禁止刷新当前页
asp清空session 关
TypeLibrary 声明
cookies和sessio
web开发:Session详
ASP中Session技巧
再谈asp中的Server.
 
你现在的位置:您现在的位置是: 中国ASP>>ASP教程>>ASP对象
ASP的Application对象和Session对象

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


ASP的Application对象成员概述
    1.  Application对象的集合
Application对象提供了两个集合,可以用来访问存储于全局应用程序空间中的变量和对象。

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

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

2.  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对象提供了在它启动和结束时触发的两个事件.
表3-5  Application对象的事件及说明

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

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

ASP的Session对象成员概述

1.  Session对象的集合
Session对象提供了两个集合,可以用来访问存储于用户的局部会话空间中的变量和对象。

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

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

2.  Session对象的特性
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对象允许从用户级的会话空间删除指定值,并根据需要终止会话。

Contents.Remove(“variable_name”)
从Session.Content集合中删除一个名为variable_name的变量

Contents.RemoveAll()
从Session.Content集合中删除所有变量

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

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

4.  Session对象的事件
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对象中。

需要指出的是,目前对于global.asa的使用已经很少见了,已经有更有效的方法用于收集访问者的信息。

相关信息:

ASP内建对象Application和Session
Cookie,Session,Application封装
Session与Cookie区别
再谈cookies和session的关系
罗列全部session和application
ASP的Application对象和Session对象
创建Variant数组
ASP中使用Session变量的优缺点
计算session和application的数量

 

中国ASP技术 ASP.ORG.CN 版权所有 2004-2008