深圳升蓝软件
数据库开发 .Net技术  |  ASP技术 PHP技术 JSP技术 应用技术类   
Hiblue Software

ASP内建对象Application 和 Session


March 25,2004
<b><font color="#026BAA">作者:</font><a href="mailto:shusheng@pchome.net"><font color="#026BAA"> 书生</font></a></b> </p>
    <p>   在上一篇中作者给大家详细介绍了 ASP 内建对象 Response
    的使用方法,在这一篇中作者将继续给大家介绍另两个非常实用且重要的
    ASP 的内建对象 Application 和 Session。

   

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

   

       让我们先来看看 Application
    对象。在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP
    应用程序。我们非但可以使用 Application
    对象,在给定的应用程序的所有用户之间共享信息,并在服务器运行期间持久的保存数据。而且,Application
    对象还有控制访问应用层数据的方法和可用于在应用程序启动和停止时触发过程的事件。</p>
    <p>   下面就让我们一起来学习 Application 对象。</p>
    <p>  <font color="#026BAA"> 一、属性</font>    虽然 A pplication 对
    象没有内置的属性,但我们可以使用以下句法设置用户定义的属性也可称为集合。</p>
    <p>   A pplication(" 属性 / 集合名称 ")= 值 </p>
    <p>   我们可以使用如下脚本声明并建立 Application 对象的属性。

    < %

    Application("MyVar") = "Hello"

    Set Application("MyObj") = Server.CreateObject("MyComponent")

    %>

   

        一旦我们分配了 A pplication 对
    象的属性,它就会持久地存在,直到关闭 W EB 服 务器服务使得 A
    pplication 停 止。由于存储在 A pplication 对
    象中的数值可以被应用程序的所有用户读取,所以 A pplication 对
    象的属性特别适合在应用程序的用户之间传递信息。</p>
    <p>  <font color="#026BAA"> 二、方法</font>    Application
    对象有两个方法,它们都是用于处理多个用户对存储在 Application
    中的数据进行写入的问题 </p>
    <p>   1 、 L ock 方 法禁止其他客户修改 A pplication 对 象的属性。</p>
    <p>   Lock 方法阻止其他客户修改存储在 Application
    对象中的变量,以确保在同一时刻仅有一个客户可修改和存取
    Application 变量。如果用户没有明确调用 Unlock 方法,则服务器将在
    .asp 文件结束或超时后即解除对 Application 对象的锁定。</p>
    <p>   让我们来看看下面这段用 A pplication 来
    记录页面访问次数的程序 :

    < %

    Dim NumVisitsNumVisits=0

    Application.LockApplication("NumVisits") = Application("NumVisits") +
    1

    Application.Unlock

    %>

    欢迎光临本网页,你是本页的第 < %= Application("NumVisits")
    %> 位访客 !

   

       将以上脚本保存在你的 .asp
    文件中,就轻而易举地给你的页面添加了一个计数器。</p>
    <p>   2、和 Lock 方法相反,Unlock 方法允许其他客户修改 Application
    对象的属性。</p>
    <p>   在上面的例子中,上述例子中,Unlock
    方法解除对象的锁定,使得下一个客户端能够增加 NumVisits 的值。</p>
    <p>   <font color="#026BAA">三、事件</font></p>
    <p>   1、Application_OnStart </p>
    <p>    A pplication_OnStart 事 件在首次创建新的会话 ( 即 S ession_OnStart
    事 件 ) 之 前发生。当 W EB 服
    务器启动并允许对应用程序所包含的文件进行请求时就触发 A
    pplication_OnStart 事 件。 A pplication_OnStart 事 件的处理过程必须写在 G
    lobal.asa 文 件之中。

   

       Application_OnStart 事件的语法如下 :

    < SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>

    Sub Application_OnStart. . .

    End Sub

    < /SCRIPT>

   

       2、Application_OnEnd    Application_OnEnd 事件在应用程序退出时于
    Session_OnEnd 事件之后发生,Application_OnEnd 事件的处理过程也必须写在
    Global.asa 文件之中。 </p>
    <p>   下面让我们来看看在使用 Application
    对象时必须注意的一些事项。</p>
    <p>   不能在 A pplication 对 象中存储 A SP 内
    建对象。例如,下面的每一行都返回一个错误。

    < %

    Set Application("var1")=Session

    Set Application("var2")=Request

    Set Application("var3")=Response

    Set Application("var4")=Server

    Set Application("var5")=Application

    Set Application("var6")=ObjectContext

    %>

   

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

    < % Application("StoredArray")(3) = "new value" %>

   

        这是因为 A pplication 对 象是作为集合被实现的。数组元素 S
    toredArray(3) 未 获得新的赋值。而此值将包含在 A pplication 对
    象集合中,并将覆盖此位置以前存储的任何信息。建议您在将数组存储在
    A pplication 对
    象中时,在检索或改变数组中的对象前获取数组的一个副本。在对数组操作时,您应再将数组全部存储在
    A pplication 对
    象中,这样您所做的任何改动将被存储下来。下列的脚本对此进行演示。
   

    ---asp8a.asp---

    < %

    dim MyArray()

    Redim MyArray(5)

    MyArray(0)="hello"

    MyArray(1)="some other string"

    Application.Lock

    Application("StoredArray")=MyArray

    Application.Unlock

    Response.Redirect "asp8b.asp"

    %>

   

    ---asp8b.asp---

    < %

    LocalArray=Application("StoredArray")

    LocalArray(1)=" there"

    Response.Write LocalArray(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
    发送过来,如果有,则服务器会启动新的会话,并为该会话生成一个全局唯一的值,在把这个值作为新
    ASPSESSIONID Cookie 的值发送给客户端,正是使用这种 Cookie,可以访问存储在服务器上的属于客户程序的信息。Session
    对象最常见的作用就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在
    Session
    对象中。另外其还经常被用在鉴别客户身份的程序中。要注意的是,会话状态仅在支持
    cookie 的浏览器中保留,如果客户关闭了 Cookie 选项,Session
    也就不能发挥作用了。 </p>
    <p>  <font color="#026BAA"> 一、属性</font> </p>
    <p>   1、SessionID </p>
    <p>   SessionID
    属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识。会话标识以长整形数据类型返回。在很多情况下
    SessionID 可以用于 WEB 页面注册统计。</p>
    <p>   2、TimeOut    Timeout 属性以分钟为单位为该应用程序的 Session
    对象指定超时时限。如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。</p>
    <p>   <font color="#026BAA">二、方法</font>    Session
    对象仅有一个方法,就是 Abandon,Abandon 方法删除所有存储在 Session
    对象中的对象并释放这些对象的源。如果您未明确地调用 Abandon
    方法,一旦会话超时,服务器将删除这些对象。当服务器处理完当前页时,下面示例将释放会话状态。
   

      < % Session.Abandon %>

   

      <font color="#026BAA"> 三、事件</font>    Session
    对象有两个事件可用于在 Session 对象启动和释放是运行过程。</p>
    <p>   1、Session_OnStart
    事件在服务器创建新会话时发生。服务器在执行请求的页之前先处理该脚本。Session_OnStart
    事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。</p>
    <p>   尽管在 Session_OnStart 事件包含 Redirect 或 End 方法调用的情况下
    Session 对象仍会保持,然而服务器将停止处理 Global.asa 文件并触发
    Session_OnStart 事件的文件中的脚本。</p>
    <p>   为了确保用户在打开某个特定的 W eb 页
    时始终启动一个会话,就可以在 S ession_OnStart 事 件中调用 R edirect 方
    法。当用户进入应用程序时,服务器将为用户创建一个会话并处理 S
    ession_OnStart 事
    件脚本。您可以将脚本包含在该事件中以便检查用户打开的页是不是启动页,如果不是,就指示用户调用
    R esponse.Redirect 方 法启动网页。程序如下 :

   

    < SCRIPT RUNAT=Server Language=VBScript>

    Sub Session_OnStart

    startPage = "/MyApp/StartHere.asp"

    currentPage = Request.ServerVariables("SCRIPT_NAME")

    if strcomp(currentPage,startPage,1) then

    Response.Redirect(startPage)

    end if

    End Sub

    < /SCRIPT>

   

       上述程序只能在支持 cookie 的浏览器中运行。因为不支持 cookie
    的浏览器不能返回 SessionID cookie,所以,每当用户请求 Web
    页时,服务器都会创建一个新会话。这样,对于每个请求服务器都将处理
    Session_OnStart 脚本并将用户重定向到启动页中。</p>
    <p>   2、Session_OnEnd 事件在会话被放弃或超时发生。</p>
    <p>   关于使用 Session 对象需要注意的事项 Application
    对象相近,请参照前文。</p>
    <p>   会话可以通过以下三种方式启动 : </p>
    <p>   1、一个新用户请求访问一个 URL,该 URL
    标识了某个应用程序中的 .asp 文件,并且该应用程序的 Global.asa
    文件包含 Session_OnStart 过程。</p>
    <p>   2、用户在 Session 对象中存储了一个值。</p>
    <p>   3、用户请求了一个应用程序的 .asp 文件,并且该应用程序的Global.asa
    文件使用 < OBJECT> 标签创建带有会话作用域的对象的实例。
    如果用户在指定时间内没有请求或刷新应用程序中的任何页,会话将自动结束。这段时间的默认值是
    2 0 分 钟。可以通过在 I nternet 服
    务管理器中设置“应用程序选项”属性页中的“会话超时”属性改变应用程序的默认超时限制设置。应依据您的
    W eb 应
    用程序的要求和服务器的内存空间来设置此值。例如,如果您希望浏览您的
    W eb 应
    用程序的用户在每一页仅停留几分钟,就应该缩短会话的默认超时值。过长的会话超时值将导致打开的会话过多而耗尽您的服务器的内存资源。对于一个特定的会话,如果您想设置一个小于默认超时值的超时值,可以设置
    S ession 对 象的 T imeout 属 性。例如,下面这段脚本将超时值设置为 5
    分 钟。

      < % Session.Timeout = 5 %>

   

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

      < % Session.Abandon %>

   

       今天,我们学习了两个在 WEB 页面特别是基于 WEB 的 BBS 或 Chat
    上经常使用 ASP
    内建对象,由于这两个对象在实际运用中很实用,因此在下一篇中作者将运用至此我们所学过的
    4 个 ASP 内建对象,给大家演示一个完整的 ASP
    应用程序,相信通过这个练习,能大大加深你对 ASP
    应用程序的理解和掌握。敬请关注“动态网站设计十八般武艺 --ASP
    篇 (9)”。 </p>
       
Copyright © 2001-2008 Shenzhen Hiblue Software Team All rights reserved