学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> ASP >> 解析ASP的Application和Session对象


解析ASP的Application和Session对象


  在已经发表的系列文章中我们已经讨论了两个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集合中获取。这提供了一个基本的方法统计访问者的数量,并收集访问者的一些基本信息。

编辑推荐:ASP应用程序设计的Web状态管理分析
技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

还没人留言,抢个先,哈哈!
对"解析ASP的Application和Session对象"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 解析ASP的Application和Session对象 相关内容
Google搜索中 解析ASP的Application和Session对象 相关内容
雅虎中 解析ASP的Application和Session对象 相关内容
Sogou搜索中 解析ASP的Application和Session对象 相关内容

相关软件 最新回复帖子:

·Windows Vista 中卸载软件的不同方式
·没有mysql支持时的替代方案
·一个可以发送附件及HTML格式邮件的PHP类
·AutoCAD打造精致三维鸟笼实例详解
·Photoshop自定义水晶字特效样式
·AutoCAD三维基础实例教程
·PS为黑背景长发美女照片抠图换背
·用Photoshop自制个性摩托车贴花小经验
·轻松几步将美女照片处理为手工素描
·巧用Photoshop画笔轻松绘制创意特效


  相关软件 解析ASP的Application和Session对象相关文章
ASP应用程序设计的Web状态管理分析 在ASP中操作HTTP报头方法分析
ASP中使用ServerVariables集合详解 在ASP中访问和更新Cookies集合
ASP中使用Form和QueryString集合 在ASP中轻松实现记录集分页显示
ASP内置对象Request和Response详解 20种看ASP程序源码的方法及工具
深入理解ASP中FSO的神奇功能 用ASP木马实现FTP和解压缩
ASP木马的原理和基本防范方法 防范ASP木马的十大基本原则
一个ASP木马程序的源代码 IIS服务器排错指南及错误代码大全
利用ASP木马程序获取管理权限 Web服务器上防范基于ASP程序的木马
ASP设计常见问题及解答精要 ASP编程中20个非常有用的例子
用ASP编写下载网页中所有资源的程序 用ASP编程实现网络内容快速查找