配色: 字号:
《ASP动态网页设计与应用(第2版)》第5章 Session、Application和Server对象
2023-05-24 | 阅:  转:  |  分享 
  
Application 和?Server 对象?第?5 章? Session、?5.1?Session 对象及
其应用?5.1.1 Session?对象简介?HTTP?协议是无状态的,即信息无法通过 HTTP?协议本身进传递。为了跟踪用户的操
作状态,ASP?使用?Session 对象来实现这一功能。当用户登陆网站,系统将为其生成一个独一无二的?Session?对象,用以
记录改用户的个人信息,一旦改用户退出网站,那么该?Session?对象将会注销。Session?对象可以绑定若干个用户信息或者?A
SP?对象,不同?Session?对象的同名变量是不会相互干扰的。?Session? 可以用来储存访问者的一些喜好,例如:访问者是
喜好绿色背景还是蓝色?这些信息可以依据?Session 来跟踪。?Session? 还可以创建虚拟购物篮。无论什么时候用户在网站中
选择了一种产品,那么这种产品就会进入购物篮,当用户准备离开时,就可以立即进行以上所有选择的产品的订购。这些购物信息可以被保存在?S
ession 中。最后,Session 还可以用来跟踪访问者的习惯,可以跟踪访问者从一个主页到另一个主页,这样对于设计者对站点的更
新和定位是非常有好处的。?Session 对象一般在服务器上设置了一个 10 分钟的过期时间,当客户停止活动后自动失效。?Sess
ion 对象是一个?ASP?内置对象,它在第一个?ASP?页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器
开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反
复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要?Session 对象。
ASP?引擎产生一个?Session 对象,当一个客户首次访问服务器上的一个?ASP?页面时,同时
ASP分配一个相应的 id 号,? 引擎同时将这个 id 号发送到客户端,存放在 Cookie 中,这样 Session?对象
和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的?Session?对象,直到客户关闭浏览
器后,服务器端该客户的?Session?对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为
该客户再创建一个新的?Session 对象。?Session? 存在于访问者从到达某个特定主页到离开为止的那段时间。每一访问者都会
单独获得一个?Session,在?Web?应用程序中,当一个用户访问该应用时,Session 类型的变量可以供这个用户在该?Web
?应用的所有页面中共享数据;如果另一个用户也同时访问该?Web?应用,他也拥有自己的?Session?变量,但两个用户之间无法通过
?Session?变量共享信息。Session?变量与特定的用户相联系,针对某一个用户赋值的?Session?变量是和其他用户的?
Session?变量完全独立的,不会存在相互影响。188?5.1.2?Session?对象的集合?Session 对象提供了两个集
合,可以用来访问存储于用户的局部会话空间中的变量和对象。?1.Contents?集合?Contents? 集合是存储于特定? Se
ssion?对象中的所有没有使用元素进行定义的变量和其值的集合,包括?Variant?数组和?Variant?类型
对象实例的引用。在网站开发中,Contents?集合直接应用不是很多,因为可以?Session("keyname")的方式来直接访
问?Contents?集合中的变变量。例如,当用户通过下面的语句设置一个? Session? 变量? username? 时,该变
量即加入到?Contents?集合中。?Session("username")="张凯"?上面的语句与下面使用?Contents?
集合来设置变量的方式是等价的。?Session.Contents("username")="张凯"?2.StaticObjects
集合?StaticObjects?集合是通过使用元素定义的、存储于这个?Session 对象中的所有变量的集合。
?5.1.3 Session?对象的属性?Session 对象提供了四个属性?SessionID、Timeout、LCID?和?C
odePag,其中使用得最多的是?SessionID。?1.SessionID?SessionID?是一个长整型只读属性,用于获取
当前会话的会话标识(id),创建会话时,该标识符由服务器产生,返回当前会话的唯一标志,为每一个?Session 分配不同的编号。?
SessionID? 可以方便地对用户进行控制,例如,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员
名登录,就不能浏览这个模块。也就是说同一个会员名同时只能一个人浏览此模块。此时可以通过用唯一会员名(设为?UserID)和?Ses
sionID?来实现了控制。当会员登录时,通过下面的语句给该会员一个?Session 记录登录状态。?Session("Statu
s")="Logged"?同时把该会员的?Session.SessionID?存储下来。当该会浏览此模块时,先判断其是否登录,若已
经登录再判断它的?SessionID?是否与数据库记录的相同,如果不同则不能访问。这样,当另一个用户用相同的会员名登录时,那么数据
库中记录的就是新的? SessionID,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能
对一些收费网站很有用,它防止了一个会员名给多个人浏览的问题。?2.Timeout?Timeout?用于为当前会话定义有效访问时间,
以分钟为单位的。如果用户在有效时间内没有进行刷新或请求一个网页,该会话结束。在各网页中根据需要可以修改。189?3.CodePag
e?CodePage? 用于定义用于在浏览器中显示页内容的代码页(CodePage)。代码页是字符集的数字值,不同的语言和场所可能
使用不同的代码页。例如,ANSI? 代码页? 1252? 用于美国英语和大多数欧洲语言。?4.LCID?LCID? 用于定义发送给
浏览器的页面地区标识(LCID)。LCID? 是唯一地标识地区的一个国际标准缩写,例如,2057?定义当前地区的货币符号是''£''。
LCID?也可用于?FormatCurrency?等语句中,只要其中有一个可选的?LCID?参数。LCID?也可在?ASP?处理指
令<%...%>中设置,并优先于会话的?LCID?属性中的设置。?5.1.4 Session?对象的方法?Session 对象允许
从用户级的会话空间删除指定值,并根据需要终止会话。?1.Remove()?Session Remove 方法用于从?Session
.Content?集合中删除变量。格式如下:?Session.Contents.Remove("variable_name")?参
数?variable_name 表示将从?Session.Content?集合中删除的变量名。例如:?Session.Conten
ts.Remove("username")?上面语句执行时将从?Session.Contents?集合中删除变量?username
。?2.RemoveAll()?Session 对象 Contents? 集合的 RemoveAll 方法用于从 Session.
Content 集合中删除所有变量。格式如下:?Session.Contents.?RemoveAll?()?3.Abandon(
)?Abandon 方法用于当网页的执行完成时,结束当前用户会话并撤消当前?Session 对象。格式如下:?Session. A
bandon()?需要注意,在调用该方法以后,仍可访问当前页中的当前会话的变量。当用户请求下一个页面时才会启动一个新的会话,并建立
一个新的?Session 对象(如果存在的话)。?5.1.5 Session?对象的事件?Session?对象在启动和结束时会话时
触发两个事件?Session_OnStart?和?Session_OnEnd。这两个事件必须在?Global.asa?文件中定义,
需要参考下一节的?Global.asa?文件进行学习。190?1.Session_OnStart?事件?Session_OnSta
rt?事件当用户会话启动时发生,在用户请求的网页执行之前。用于初始化变量、创建对象或运行其他代码。当对象的例程每一次启动时触发?
Session_OnStart? 事件,然后运行?Session_Onstart?事件的处理过程。也就是说,当服务器接收到应用程序
中的?URL 的?HTTP?请求时,触发此事件,并建立一个?Session 对象。?2.Session_OnEnd?事件?Sess
ion_OnEnd? 事件当用户会话结束时发生。从用户对应用程序的最后一个页面请求开始,如果已经超出预定的会话超时周期则触发该事件
。当 调 用? Session.Abandon? 方 法 时 或 者 在? TimeOut? 的 时 间 内 没 有 刷 新 ,
这 会 触 发?Session_OnEnd 事件,然后执行里面的脚本。?5.1.6 Session?对象的应用当用户在网页间浏览时
,某个网页的脚本变量只能在该网页内有效,一旦离开了该网页,即失去作用,如果需要在另一个网页中继续使用该变量,就可以通过?Sessi
on 来完成。下 面 是 一 个? Session? 应 用 案 例 , 案 例 由 两 个 文 件 构 成 , 一 个 是 设
置? Session? 变 量?addSession.asp 文件,另一个是检查?Session 变量的?checkSession
.asp 文件。?addsesssion.asp 文件内容如下:??? ad>? b2312"?/>?设置?Session??<%?Session("id")=Sess
ion.Sessionid?Session("Hello")="欢迎来到我的网站"?%>??

这个网页设置?Ses
sion 变量?Hello

?

转到下一页?

? body>??checkSession.asp 文件内容如下:?? tml>?? harset=gb2312"?/>191?''记录?Sessionid?''设置?Session 变量?Hello?检查<br> ?Session??<%?''检查用户是否已经浏览过 adSession.asp 页?if Sessi
on("id")<>?Session.Sessionid?then?Response.Redirect?"addSession.a
sp"?end?if?%>??<%=Session("Hello")%>???两个网页的浏览效果如图?5-1?所示。''如
果没有,则转到 adSession.asp 页?图 5-1 Session 对象的应用当用户浏览 adSession.asp 页面
,将通过下面的语句创建两个?Session 变量,并赋值。?Session("id")=Session.Sessionid?Ses
sion("Hello")="欢迎来到我的网站"?''记录?Sessionid?''设置?Session 变量?Hello?当用户点击
链接文字“下一页”,将跳转到?checkSession.asp 页。当进入?checkSession.asp?页,先通过下面的语句
检查用户是否已经访问过 adSession.asp 页面。?if Session("id")<>?Session.Sessioni
d?then?Response.Redirect?"addSession.asp"?end?if?如 果 用 户 是 直 接 进
入 该 页 , 没 有 访 问 过? adSession.asp? 页 , 此 时 的? Session("id") 与?Sess
ion.Sessionid 不相等,则跳转到?adSession.asp 页面。如果用户已经访问过? adSession.asp?
页面,则显示文字“欢迎来到我的网站”。注意这一页没有赋值操作,这里的变量 Hello 和?id 的值是?adSession.as
p 页面赋值。这个案例演示了?Session 最普遍的用法,无法用普通的脚本变量来进行这种处理,因为一般的变量只在一个单个主页内有
效,而?Session 变量在用户离开网站前一直存在生效。要理解的很重要的一点是?Session 变量是针对特定用户相联系的。针对
某一个用户赋值的?Session 变量是和其他用户的?Session 变量完全独立的,不会存在相互影响。换句话说,这里面192?''
如果没有,则转到 adSession.asp 页?针对每一个用户保存的信息是每一个用户自己独享的,不会产生公享情况。例如下面这个例
子:?<%?Session(“Myname”)=Response.form(“Username”)?Session(“Mycomp
any”)=Response.form(“Usercompany”)?%>? Session 的?Mynam
e 变量和?Mycompany 变量各自是不同的内容,很明显,对于不同的用户,?在每个人在网站的不同主页间浏览时,这种针对某个特定
用户的变量会一直保留,这样作为身份认证是十分有效的。?5.2 Application 对象与?Server? 对象的应用?5.2.
1 Application 对象简介?Application?对象是个应用程序级的对象,用来在所有用户间共享信息,并可以在?Web
?应用程序运行期间持久地保持数据。?Application 对象主要用于存储应用程序信息。当服务器启动后就产生了?Applicat
ion 对象,一旦创建了?Application 对象,除非服务器关闭,否则将一直保持下去。在?ASP?服务器运行时,仅有一个?A
pplication 对象,它由服务器创建,也由服务器自动清除,不能被用户创建和清除,只能创建这个?Appliation 对象的同
步拷贝。当客户在所访问的网站的各个页面之间浏览时,所使用的?Application 对象都是同一个,直到服务器关闭。从本质上来说,
一个?ASP?应用程序就是在硬盘上的一组主页以及?ASP?文件,当?ASP?应用程序在服务器端启动时,就创建了一个?Applica
tion?对象,Application?对象拥有作为单个网页所无法拥有的属性。下面是?ASP?的?Application 的一些特
性:数据可以在?Application 内部共享,因此可以覆盖多个用户;Application?包含可以触发某些?applicat
in?脚本的事件,可以被整个?Application 共享。个别的?Application 可以用?Internet? Servi
ce? Manager?来设置而获得不同属性单独的? Application? 可以隔离出来在其自身的内存中运行,这就是说,如果某
个用户的?Application 遭到破坏,不会影响其他人;可以停止一个?Application(将其所有组件从内存中驱除)而不会
影响到其他应用。与?Session?不同的是,Application?变量不需要?Cookies。网站不需要利用?Applicat
ion?变量来跟踪用户进程。这就意味着使用起来很安心,可以适应任何浏览器。同时,Application 变量可以被多个用户共享,一
个用户对?Application 变量的操作结果可以传递给另外的用户。?5.2.2 Application 对象的属性、方法与事件
?1.Application 对象的属性?Application 对象没有内置的属性,但是设计者可以自行创建其属性,方法如下:?A
pplication("属性名")=值大部分?Application 变量都存放在?Contents?集合中,当创建一个新的?Ap
plication 属性时,193?其实就是在?Contents?集合中添加了一项变量。下面两个脚本是等效的:?<% Applic
ation("hello")="欢迎使用?ASP?案例教程"?%>?<% Application.contents("hello"
)="欢迎使用?ASP?案例教程"?由于?Application 变量存储在集合里,所以如果想要全部显示,通常可以用?For? E
ach 循环来实现。例如:?<%?For?Each?item In Application.Contents?Response.w
rite("
"&item&Application.Contents(item))?next?%>?2.Applicatio
n 对象的方法:?Application?对象的方法只有两个方法:一个是?Lock,另一个是?Unlock。其中?Lock?方法
Unlock 则用于取消 Lock 方法的限制。用于保证同一时刻只
能一个用户对 Application 进行操作。?例如:?<%?Application.Lock?Application("vis
itor_num")=Application("visitor_num")+1?Application.Unlock?%>?这种方
法主要是为了防止多个用户同时对共享的?Appliction 对象进行修改,而造成错误。?3.Application 对象的事件?A
pplication? 对 象 有 两 个 事 件? Application_OnStart()? 和? Application_
OnEnd()? 。?Application_OnStart()事件在应用程序启动时触发,Application_OnEnd()事
件在应用程序结束时触发。Application 对象的事件过程都是必须定义在 Global.asp 文件中,一般把连接数据的函数定
义在这两个事件,然后放在 Global.asp 中。下面是?Application 对象的常用方式:?Application("A
ppName")=value?Application.Lock?Application.UnLock?′存储?Applicatio
n 变量值,也可读取该值?′Application 变量值锁定,防止同时更改变量值?′Application 变量值解锁,允许更改
变量值IsEmpty(Application("AppName"))=True? ′判断?Application 值是否存在?此外
,Application 与?Session 对象变量都可以用来存储数组和系统对象,引用方法是变量名相当于数组名,但不能直接改变其
值,需要借助临时数组修改值后,再赋给? Session? 与?Application 变量。?5.2.3 Server? 对象简介
?Server?对象提供了一系列的方法和属性,在使用?ASP?编写脚本时是非常有用的。最常用194?的是?Server.Creat
eObject?方法,它允许设计者在当前页的环境或会话中在服务器上实例化其他组件对象,通过这些组件对象来扩充?ASP?的功能(如数
据库访问,邮件发送等)。此外,Server?对象还有一些方法能够把字符串翻译成在?URL 和?HTML 中使用的正确格式,这将通过
把非法字符转换成正确、合法的等价字符来实现。?Server? 对象提供对服务器上的方法和属性的访问。其中大多数方法和属性是作为实用
程序的功能服务的。?5.2.4 Server? 对象的属性?Server? 对象只有一个属性——ScriptTimeout,用于设
置程序能够运行的最大时间 。?ScriptTimeout? 属性指定脚本在结束前最大可运行多长时间。 当处理服务器组件时,超时限制
将不再生效。 使用格式如下:?Server.ScriptTimeout?=?NumSeconds?其中,参数?NumSeconds
?指定脚本在被服务器结束前最大可运行的秒数。默认值为? 90? 秒。通过使用元数据库中的?AspScriptTimeout?属性可
以为? Web? 服务或? Web? 服务器设置缺省的?ScriptTimeout?值。ScriptTimeout?属性不能设置为
小于在元数据库中指定的值。例如,如果?NumSeconds?设置为?10,而元数据库设置包含了默认值?90?秒,则脚本在?90 秒
后超时。但如果?NumSeconds?设置为?100,则脚本在?100?秒后超时。下面语句中,如果服务器处理脚本超过 100?秒,
将使之超时。?<%?Server.ScriptTimeout?=?100?%>?下面的语句用于获取? ScriptTimeout?
属性当前值,并将其存储在变量? TimeOut? 中。?<%?TimeOut?=?Server.ScriptTimeout?%>
?5.2.5 Server? 对象的方法(1)CreateObject?CreateObject?方法创建服务器组件的实例。使用格
式如下:?Server.CreateObject(?progID?)?其中,参数?progID? 指定要创建的对象的类型。prog
ID? 的格式如下:?[Vendor.]?component[.Version]?默认情况下,由? Server.CreateOb
ject? 方法创建的对象具有页作用域。这就是说,再当前?ASP? 页处理完成之后,服务器将自动销毁这些对象。例如,在如下所示的脚
本中,当?Session? 对象被销毁,即当对话超时时或? Abandon? 方法被调用时,存储在会话变量中的对象也将被销毁。?<
%?Set?Session("ad")?=?Server.CreateObject("MSWC.AdRotator")%>?可以通
过将变量设置为? Nothing? 或新的值来销毁对象,如下所示。?<%?set?Session ("ad")?=?Nothing
?%>?<%?Session ("ad")?=?"?Other?Valum?"?%>?第一行语句用于释放? ad? 对象,第二行语
句用一个字串赋值给 ad? 。需要注意,不能创建与?ASP?内置对象同名的对象实例。例如,下列脚本将返回错误。195?<%?Set
?Response?=?Server.CreateObject("Response")?%>?(2)HTMLEncode?HTML
Encode 方法用于对指定的字符串采用? HTML? 编码。使用格式如下:?Server.HTMLEncode(?string?
)?其中,参数?string? 指定要编码的字符串。?HTMLEncode? 方法常用于需要在客户端输出一些特殊的? HTML?
字符,如“<”和“>”,这些字符在?HTML?中有着特殊用途,因此不能直接使用?Response.Write?方法输出,而需要使用
?HTMLEncode 转码后输出。例如:?<%=?Server.HTMLEncode("The?paragraph?tag:?<
P>")?%>?上面语句将在客户端输出 “The?paragraph?tag:?

? ”。以上输出将被? Web? 浏览器显示
为“The?paragraph?tag:?

”如果查看一下源文件或以文本 方 式 打 开 一 个? Web? 页 , 就 可
以 看 到 已 编 码 的? HTML? 语 句 “ sfasThe? paragraph? tag:?<?P>?”,其中
将<和>用对应的 HTML 编码进行了替换。(4)URLEncode?URLEncode? 方法将? URL? 编码规则,包括转义
字符,应用到指定的字符串。使用格式如下:?Server.URLEncode(?string?)?其中,参数?String? 指定要
编码的字符串。 例如:?<%?Response.Write(Server.URLEncode("http://www.sina.c
om"))?%>?上面语句将输出:http%3A%2F%2Fwww%2Esina%2Ecom?(5)MapPath?MapPath
? 方法将指定的相对或虚拟路径映射到服务器上相应的物理目录。使用格式如下 :?Server.MapPath(?Path?)?其中,
参数? Path? 指定要映射物理目录的相对或虚拟路径。若? Path? 以一个正斜杠? (/)? 或反斜杠? (\)? 开始,则
? MapPath? 方法返回路径时将? Path? 视为完整的虚拟路径。若? Path? 不是以斜杠开始,则? MapPath?
方法返回同当前 asp? 文件中已有的路径相对的路径。注意,MapPath? 方法不支持相对路径语法? (.)? 或? (..)
,下列相对路径返回一个错误。?Server.MapPath(../MyFile.txt?)?MapPath? 方法不检查返回的路径
是否正确或在服务器上是否存在。因为? MapPath? 方法只映射路径而不管指定的目录是否存在,所以,您可以先用? MapPath
?方法映射物理目录结构的路径,然后将其传递给在服务器上创建指定目录或文件的组件。对 于 下 面 示 例 , 假 设 文 件? da
ta.txt? 和 包 含 下 列 脚 本 的? test.asp? 文 件 都 位 于 目 录?C:\Inetpub\wwwro
ot\Script?下。C:\Inetpub\wwwroot?目录被设置为服务器的根目录。下列示例使用服务器变量? PATH_IN
FO? 映射当前文件的物理路径。?<%=?server.mappath(Request.ServerVariables("PATH
_INFO"))%>
?将输出?c:\inetpub\wwwroot\Script\test.asp
?由于下列示例中
的路径参数不是以斜杠字符开始的,所以它们被相对映射到当前目录,196?此处是? C:\Inetpub\Wwwroot\Script
。?<%=?server.mappath("data.txt")%>
?上面语句将输出?c:\inetpub\wwwroot
\Script\data.txt
?<%=?server.mappath("Script/data.txt")%>
?
上面语句将输出?c:\inetpub\wwwroot\Script\Script\data.txt
?下面的两个示例使用斜杠
字符指定返回的路径应被视为在服务器的完整虚拟路径。?<%=?server.mappath("/Script/data.txt")%
>
?上面语句将输出?c:\inetpub\Script\data.txt
?<%=?server.mappath("
\Script")%>
?上面语句将输出?c:\inetpub\Script
?下列示例演示如何使用正斜杠? (/)?
或反斜杠? (\)? 返回宿主目录的物理路径。脚本?<%=?server.mappath("/")%>
?上面语句将输出?
c:\inetpub\wwwroot
。?<%=?server.mappath("\")%>
?上面语句将输出?c:\
inetpub\wwwroot
。?5.2.6 Global.asa?文件?Global.asa?文件又称为?ASP?全局文
件,它是一个可选文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象。Global.asa?文件的内容
不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象。该文件的名称必须是?Global.asa? 且必须存放在应用
程序的根目录中,每个应用程序只能有一个 Global.asa? 文件。可以用任何支持脚本的语言编写? Global.asa? 文件
中包含的脚本。如果多个事件使用同一种脚本语言,就可以将它们组织在一组? 标记中。在? Global.asa? 文
件中,包含的脚本必须用? 标记封装。如果包含的脚本没有用? 标记封装,或定义的对象没有会话或应
用程序作用域,则服务器将返回错误。服务器会忽略已标记的但未被应用程序或会话事件使用的脚本以及文件中的? HTML? 语句。?Glo
bal.asa? 文件只能包含如下内容:应用程序(Application)事件、会话(Session)事件、??
声明和?TypeLibrary? 声明。当用户保存对? Global.asa? 文件所做的更改时,在重新编译? Global.as
a? 文件之前,服务器会结束处理当前应用程序的所有请求。在此期间,服务器拒绝其他请求并返回一个错误消息,说明正在重启动应用程序,不
能处理请求。当用户当前的所有请求处理完之后,服务器对每个会话调用? Session_OnEnd? 事件,删除所有活动会话,并调用?
Application_OnEnd? 事件关闭应用程序,然后编译? Global.asa? 文件。接 下 来 , 用 户 的 请
求 将 启 动 应 用 程 序 并 创 建 新 的 会 话 , 触 发? Application_OnStart? 和?Sess
ion_OnStart? 事件。但是,保存? Global.asa? 文件中所包含的文件的更改并不能使服务器重新编译? Globa
l.asa。为了让服务器识别包含文件的改动,必须再保存一下? Global.asa? 文件。在? Global.asa? 文 件
中 声 明 的 过 程 只 能 从 一 个 或 多 个 与? Application_OnStart?、?Application_
OnEnd、Session_OnStart? 和? Session_OnEnd? 事件相关的脚本中调用。用户可以在?Global.
asa? 文件中为这些事件指定脚本。当应用程序启动时,服务器在? Global.asa? 文件中查197?找并处理?Applica
tion_OnStart? 事件脚本。当应用程序终止时,服务器处理? Application_OnEnd?事件脚本。当没有? Se
ssion? 会话的用户在打开应用程序中的? Web? 页时,Web? 服务器会自动创建会话。当超时或服务器调用? Abandon
? 方法时,服务器将终止该会话。Session 会话有两个事件,即? Session_OnStart? 事件和? Session_
OnEnd? 事件。 可以在全局文件? Global.asa? 中为这两个事件指定脚本。当会话开始时,服务器在? Global.a
sa? 文件中查找并处理?Session_OnStart? 事件脚本 。 该 脚 本 将 在 处 理 用 户 请 求 的? Web
? 页 之 前 处 理 。 在 会 话 结 束 时 , 服 务 器 将 处 理?Session_OnEnd? 事件脚本。(1)Ap
plication_OnStart?Application_OnStart? 事件在首次创建新的会话(即? Session_OnS
tart? 事件)之前发生。只有? Application? 和 Server? 内建对象是可用的。 Application_On
Start? 事件脚本中引用? Session、?在Request? 或? Response? 对象将导致错误。?Applicat
ion_OnStart? 事件格式如下:? >?Sub?Application_OnStart?…?End?Sub??其中,参数?ScriptLanguag
e 指定用于编写事件脚本的脚本编写语言。可以是任一支持脚本编写的语言,例如? VBScript? 或? JScript。如果有多个
事件使用同一种脚本编写语言,则可以将其组织在一组? ?有一点需要注意,不能在? Application_OnEnd? 脚本
中调用? MapPath? 方法。(3)Session_OnStart?Session_OnStart? 事件在服务器创建新会话时
发生。服务器在执行请求的页之前先处理该脚本。Session_OnStart? 事件是设置会话期变量的最佳时机,因为在访问任何页之前
都会先设 ObjectContext、?Request、?Response、?Se
rver? 和? Session)? 都置它们。所有内建对象? (Application、?可以在? Session_OnStar
t? 事件脚本中使用和引用。?Session_OnStart?事件使用格式如下:? anguage Runat=Server>?Sub?Session_OnStart?.?.198?''在这里添加脚本?''在这里添加脚
本?End?Sub??尽管在? Session_OnStart? 事件包含? Redirect? 或? End?
方法调用的情况下? Session? 对象仍会保持,然而服务器将停止处理? Global.asa? 文件并触发? Session
_OnStart? 事件的文件中的脚本。(4)Session_OnEnd?Session_OnEnd? 事件在会话被放弃或超时发生
。在服务器内建对象中,只有? Application、?Server? 和? Session? 对象可用。?Session_OnE
nd 事件使用格式如下:??Sub?Se
ssion_OnEnd?.?.?.?End?Sub??Global.asa?使用了微软的?HTML?拓展 ipt>标记语法来限制脚本,这也就是说,必须用???SUB?Session
_Onend?Response.AppendToLog Session.SessionID&"?Ending"?END?SUB?<
/Script>?这个例子中,当用户的?Session 开始时,日志文件中记录了该用户的?Session 和?Starting 信
息;当用户的?Session?结束时,日志文件就记录了该用户的?Session?结束的信息。这样,就可以作很多种判断统计,例如说每
个人的停留时间、站上现在有多少人等等。这样对于站点设计和定位就很有助益。?5.2.7 #include?指令?#include 是
一种服务器端包含指令(SSI,Server-Side?Include),该指令为用户提供在? Web?服务器处理之前将一个文件的内
容插入到另一个文件的方法。要在? .asp? 文件中插入一个文件,使用下面的语法:??其中,virtual? 和? file? 关键字指示用来包含该文件的路径的类型,filename? 是需要包含的文件的路径和名称。被包含文件不要求专门的文件扩展名,可以将其取名为.asp 或其它任意的名称。但是,为被包含文件赋予? .inc? 扩展名以便和其他类型文件相区分是一个良好的编程习惯。?1.使用? Virtual? 关键字进行包含使用? Virtual? 关键字指出路径开始于虚拟目录。例如,如果一个名为? cal.inc? 的文件位于一个名为/include 的虚拟目录下,则下面的一行将把?cal.inc? 的内容插入到包含该行的文件中:??2.使用? File? 关键字进行包含使用? file? 关键字指示使用相对路径。相对路径开始于含有该包含文件的目录。例如,如果当前文件位于网站根目录(/)下,而文件? cal.inc? 位于/include? 下,下面的语句将把? cal.inc?插入到当前文件中:?200?注意,被包含文件? include/cal.inc? 的路径是相对于包含文件的;如果包含? #include? 语句的当前文件不在根目录下,那么该语句将不起作用。如果在? IIS?服务管理器站点属性中的“启用上层目录”选项被选中,则也可以使用? file? 关键字和? ../? 语法包含父目录即上一层目录中的文件。?3.包含文件注意事项被#include 指令所包含的文件必须符合 ASP 语法,可以是静态的 HTML 文件或 ASP 脚本。在浏览网页时,ASP?引擎将对所包含的文件内容进行语法分析。如果包含的是? ASP? 脚本,将会执行这个被包含的? ASP? 脚本中的代码。如果仅仅只是用?#include? 指令来包含一个静态文件,那么这个包含的文件所执行的结果将会插入到? ASP? 文件中#include 指令所在的位置。一旦执行完了包含文件,那么主?ASP?文件的执行过程将会恢复,继续执行下一行。被包含的文件可以是 HTML 文件、ASP?文件、文本文件,或者只是一段?ASP?脚本代码,但是需要注意在这个包含文件中不能使用、、或标记,因为这将会影响在原?ASP?文件中同样的标记,这样做有时会导致错误。?#include 指令包含的文件的路径名一般来说是指相对路径,不需要什么端口、协议和域名,如果这个路径以“/”开头,那么这个路径主要是参照是相对于包含这个? ASP? 文件的? We? b?应用程序的根目录,如果路径是以文件名或目录名开头,那么这个路径就是正在使用的? ASP?文件的当前路径。201?

献花(0)
+1
(本文系大高老师原创)