ASP内建对象Application 和 Session


   在上一篇中作者给大家 详尽介绍了 ASP 内建对象 Response 的 使用 步骤,在这一篇中作者将 接续给大家介绍另两个十分有用且主要的 ASP 的内建对象 Application 和 Session 。    在 ASP 的内建对象中除了用于发送、 接纳和 解决数据的对象外,还有一些十分有用的代表 Active Server 利用程序和单个消费者信息的对象 。    让我们先来看看 Application 对象 。在同一 虚构目录及其子目录下的所有 .asp 文件组成了 ASP 利用程序 。我们非但 可以 使用 Application 对象,在给定的 利用程序的所有消费者中间共享信息,并在服务器运行期间 长久的 保留数据 。而且,Application 对象还有操纵 拜访 利用层数据的 步骤和可用于在 利用程序启动和 停留时触发过程的事件 。

  下面就让我们一同来学习 Application 对象 。

  一、属性

   固然 A pplication 对 象没有内置的属性,但我们 可以 使用以下句法设置消费者定义的属性也可称为 集中 。

  A pplication(" 属性 / 集中名称 ")= 值

  我们 可以 使用如下脚本申明并 构建 Application 对象的属性 。 < % Application("MyVar") = "Hello" Set Application("MyObj") = Server.CreateObject("MyComponent") %>     一旦我们 调配了 A pplication 对 象的属性,它就会 长久地存在,直到关闭 W EB 服 务器服务使得 A pplication 停 止 。由于存储在 A pplication 对 象中的数值 可以被 利用程序的所有消费者读取,所以 A pplication 对 象的属性特殊 合适在 利用程序的消费者中间传递信息 。

  二、 步骤

  Application 对象有两个 步骤,它们都是用于 解决多个消费者对存储在 Application 中的数据进行写入的问题

  1 、 L ock 方 法禁止 其余客户 批改 A pplication 对 象的属性 。

  Lock 步骤阻挠 其余客户 批改存储在 Application 对象中的变量,以确保在同一时刻仅有一个客户可 批改和存取 Application 变量 。假如消费者没有明确调用 Unlock 步骤,则服务器将在 .asp 文件 完毕或超时后即解除对 Application 对象的锁定 。

  让我们来看看下面这段用 A pplication 来 记录页面 拜访次数的程序 : < % Dim NumVisitsNumVisits=0 Application.LockApplication("NumVisits") = Application("NumVisits") + 1 Application.Unlock %> 欢送 光临本网页,你是本页的第 < %= Application("NumVisits") %> 位访客 !    将以上脚本 保留在你的 .asp 文件中,就轻而易举地给你的页面增加了一个计数器 。

  2、和 Lock 步骤相反,Unlock 步骤同意 其余客户 批改 Application 对象的属性 。

  在上面的例子中,上述例子中,Unlock 步骤解除对象的锁定,使得下一个客户端 可以增加 NumVisits 的值 。

  三、事件

  1、Application_OnStart

  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 文件之中 。

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

  不能在 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 也就不能 施展作用了 。

  一、属性

  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 事件的文件中的脚本 。

  为了确保消费者在 打开某个特定的 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 脚本并将消费者重定向到启动页中 。

  2、Session_OnEnd 事件在会话被抛弃或超时 产生 。

  关于 使用 Session 对象需求 留神的事项 Application 对象相近,请参照前文 。

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

  1、一个新消费者 申请 拜访一个 URL,该 URL 标识了某个 利用程序中的 .asp 文件,而且该 利用程序的 Global.asa 文件包括 Session_OnStart 过程 。

  2、消费者在 Session 对象中存储了一个值 。

  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)” 。