|
|
|
| |
| |
| 章节: |
| 第4章 ASP的内置对象 |
| 第3节 Application对象和Session对象
FLASH版演示教案 |
| 教学目的: |
掌握Application对象和Session对象的属性、方法、事件;
掌握Application对象和Session对象在追踪用户信息方面的功能;
了解Global.asa文件的用途 |
| 重点: |
| Application对象和Session对象在追踪用户信息方面的功能 |
| 难点: |
| Global.asa文件 |
| 内容: |
| Application对象用于记录所有访问该程序的客户信息;Session对象用于记录特定用户的信息。
4.3.1 Application对象
ASP程序是由虚拟目录及其子目录下的所有.asp文件构成的。可以使用Application对象在程序的所有用户中共享信息,并可以在服务器运行期间持久地保存数据,而且Application对象还有控制访问应用层数据的方法和可用于在程序启动和停止时触发过程的事件。
开发交互式的网站,最重要的一点是解决每个独立的Web页面之间的交互。HTTP是一个无态的协议,它的工作过程是:用户端发出请求,服务器端作出响应。每一次浏览器端发出的请求都是独立的,他们之间并没有什么联系。HTTP协议没有定义服务器端跟踪用户请求,这样在服务器端完成响应用户的请求后,服务器端不再保持与客户端的持续连接。但在开发以ASP为基础的应用程序时,经常需要在多个用户之间共享信息。ASP引用Application对象来实现多个用户之间的信息共享。
1.Application对象方法
Application对象有两个方法,它们都是用于处理多个用户对存储在Application中的数据进行写入的问题。
(1)Lock方法
Lock方法用于锁定Application对象,禁止其他客户修改Application对象的属性。当用户调用Lock时,只有当前用户能够改变Application对象的属性。即Lock方法保证同一时刻仅有一个用户在对Application对象进行操作。
(2)Unlock方法
与lock方法相反,Unlock方法用于解除锁定,允许其他客户修改Application对象的属性。
Lock方法锁定对象之后,可以用Unlock方法解除对象的锁定,如果用户没有明确调用Unlock方法,则服务器将在.asp文件结束或超时后自动解除对Application对象的锁定。这样就保证数据的一致性和完整性。
在下面使用Application来记录页面访问次数的范例中采用了Lock方法和Unlock方法,试想,如果网站在统计访问次数时,有几个人同时访问此网站,如果不加以措施的话,一定会出错。
范例4-15:sample4-15.asp,使用Application记录页面访问次数
<%
Application.lock ' 先锁定
Application("visitnum")=application("visitnum")+1
' 当客户登录此页面,来访次数加1
Application.unlock ' 再解锁
%>
<html>
<head>
<title>Application范例</title>
</head>
<body>
欢迎光临盛达网,您是第<%=Application("visitnum")%>位访客!
</body>
</html>
点击浏览sample4-15.asp效果(打开二次,注意观察来访数的变化)。
2.Application事件
Application事件有Application_OnStart和Application_OnEnd事件,在ASP应用程序中,它在用户首次打开应用程序的Web页时启动,在关闭服务器时终止。我们可以在Global.asa文件中为这些事件指定脚本,当应用程序启动时,服务器在Global.asa文件中查找并处理Application_OnStart事件的脚本,在应用程序结束时,服务器又将处理Application_End事件的脚本。Global.asa文件后面将介绍。
(1) Application_OnStart事件
Application_OnStart事件是在应用程序启动时触发。
Application_OnStart事件的语法如下:
<SCRIPT LANGUAGE=scriptlanguage RUNAT=server>
Sub Application_OnStart
处理事件过程
End Sub
</SCRIPT>
scriptlanguage:指定用于编写事件脚本的脚本语言。一般常用的脚本语言有:VBscript、Jscript等。
Application_OnStart事件只有Application与Server对象是可用的。Session、Request以及Response对象是不能被Application_OnStart事件的脚本所引用,否则将会导致错误。
(2) Application_OnEnd事件
Application_OnEnd事件是在应用程序结束时触发。
Application_OnEnd事件的语法如下:
<SCRIPT LANGUAGE=scriptlanguage RUNAT=server>
Sub Application_onEnd
处理事件过程
End Sub
</SCRIPT>
4.3.2 Sesssion对象
Session对象用于存储特定的用户会话所需的信息。Session填补了HTTP协议的局限,HTTP协议的工作过程是用户发出请求,服务器端作出响应,它不能允许服务器端来跟踪用户请求,用户请求完成响应后服务器端就不能持续与该浏览器保持连接,所以服务器端和用户端不能保持连续的联系。引用Session则可以使一个用户在多个页面间切换的时候也能保留该用户的信息。
使用Session对象存储特定的用户会话所需的信息,当用户在程序的页面之间跳转时,存储在Session对象中的变量不会清除,而用户在程序中访问页面时,这些变量始终存在。当用户请求来自应用程序的Web页时,如果该用户还没有会话,则Web服务器将自动创建一个Session对象。
Session信息是对一个客户而言,不同的客户信息用不同的Session信息来记录。当客户端启动一个Session时,ASP会自动产生一个SessionID。SessionID是由一个复杂算法生成的号码,它唯一标识每个用户会话。在新会话开始时,服务器将SessionID作为一个Cookie存储在用户的Web浏览器中。
Session的语法如下:
Session.集合|属性|方法
范例4.16:简单的Session应用
<html>
<head>
<title>简单的Session应用</title>
</head>
<%
Session("greeting")="欢迎您,朋友! "
Response.write(session("greeting"))
%>
</body>
</html>
上例程序首先将”欢迎您,朋友!”赋给会话变量greeting,然后再屏幕显示出来。
1.Session的属性
Session的常用属性有SessionID和TimeOut。
(1)SessionID
ASP给每一个用户分配了可以识别它的唯一标识,当首次创建用户会话时,就会产生用户的ID且一直在网站保留。利用SessionID可以跟踪访问者活动情况。
范例4-17:sample4-17.asp
<html>
<head>
<title>SessionID范例</title>
</head>
<body>
<br>你的登录编号为:<%=session.SessionID%>
</body>
</html>
点击浏览sample4-17.asp效果。
(2)TimeOut
当用户浏览页面时,他可能会有暂时的离开或是已经关机。如果在一个很长的时间内服务器还保存该用户会话信息那就浪费资源,所以必须设置一个最长的可间隔的时间,假如用户在此时间内没有活动,那么服务器就可以收回用来跟踪用户会话的资源。Timeout属性以分钟为单位为该程序的Session对象指定超时时限。如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。会话的超时时间默认为20分钟。
例如,<%session.timeout=10%>,将超时值设为10分钟。
还可以利用session来存取数组信息。一个被定义为session类型的数组只能将整个数组做为一个对象,而且session把传入的对象视为一个数组包,而不是数组内的个别项元素,用户不能直接改变session数组中某个元素的值。
范例4-18:包含sample4-18.asp和 sample4-18result.asp两个文件
sample4-18.asp代码如下:
<html>
<head>
<title>session范例</title>
</head>
<body>
<%
dim arr()
redim arr(4)
arr(0)="我爱你"
arr(1)="祖国"
session("myarray")=arr
response.redirect("sample4-18result.asp")
%>
</body>
</html>
sample4-18result.asp代码如下:
<html>
<head>
<title>session范例</title>
</head>
<body>
<%
localarray=session("myarray")
localarray(1)="中国"
response.write(localarray(0)&localarray(1))
session("myarray")=localarray
%>
</body>
</html>
点击浏览sample4-18.asp效果。
2.Session对象的方法
Session对象的方法有Abandon。
Abandon方法用于删除所有存储在Session对象中的对象并释放这些对象的资源。如果没有明确地调用Abandon方法,一旦会话超时,服务器也将删除这些对象。当服务器处理完当前页时,下面示例将释放会话状态。可以在Web页面任何位置用abandon方法清除对象,但此方法必须在任何session对象设置后被调用,否则session对象实例仍然是存在的。
3.Session对象的事件
Session对象的事件有两个,Session_OnStart和Session_OnEnd,分别用于对象的启动和释放。
(1)Session_OnStart
Session_OnStart 事件在服务器创建新会话时发生。服务器在执行请求的页之前处理该脚本。Session_OnStart事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。尽管在Session_OnStart事件包含Redirect或End方法调用的情况下Session对象仍会保持,然而服务器将停止处理Global.asa文件并触发Session_OnStart事件的文件中的脚本。
为了确保用户在打开某个特定的Web页时始终启动一个会话,可以在Session_OnStart事件中调用Redirect方法。当用户进入应用程序时,服务器将为用户创建一个会话并处理Session_OnStart事件脚本。可以将脚本包含在该事件中以便检查用户打开的页是不是启动页,如果不是,就指示用户调用Response.Redirect方法启动网页。
(2)Session_OnEnd
Session_OnEnd事件在会话被放弃或超时时发生。关于使用Session对象需要注意的事项与Application对象相近,请参考前文。
会话可以通过三种方式启动。一个新用户请求访问一个URL,该URL标识了某个应用程序中的.asp文件,并且该应用程序的Global.asa文件包含Session_OnStart过程;用户在Session对象中存储了一个值;用户请求了一个程序的.asp文件,并且该程序的Global.asa文件使用<object>标签创建带有会话作用域对象的实例。
如果用户在指定时间内没有请求或刷新程序中的任何页,会话将自动结束。这段时间的默认值是20分钟。可以通过在Internet服务管理器中设置“应用程序选项”属性页中的“会话超时”属性改变应用程序的默认超时限制设置。如果Web应用程序的用户在每一页仅停留几分钟,就应该缩短会话的默认超时值。过长的会话超时值将导致打开的会话过多而消耗大量的服务器的内存资源。对于一个特定的会话,如果想设置一个小于或大于默认超时值的超时值,可以设置Session对象的Timeout属性。
当一个用户访问某页面时,每个Session变量的运行环境便自动生成,这些Session变量可在用户离开该页面后仍保留二十分钟(默认值)。所以,如果在Session中置入了较大的对象则会随着站点访问量的加大,会给服务器带来沉重负担。
4.3.3 Global.asa文件
前面我们提到了Global.asa文件,它是个可选文件,功能是用于存放Application对象和Session对象事件的程序,以充分发挥Application对象和Session对象的强大作用。可以在Global.asa文件中指定事件的脚本,并且还可以声明具有会话和应用程序作用域的对象。其实它的内容并不是给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象。
对于每个应用程序而言,只能有一个Global.asa文件,文件名规定为Global.asa,并且只有把Global.asa文件放在程序根目录下才有效。
Global.asa文件通常是用来存放Application对象事件和Session对象事件的程序。
1.Application事件
Application事件在用户首次打开程序的Web页时启动,在关闭服务器时终止。在应用程序中要用到Application_OnStart和Application_End事件。我们可以在Global.asa文件中为这些事件指定脚本,当应用程序启动时,服务器在Global.asa文件中查找并处理Application_OnStart事件的脚本,在应用程序结束时,服务器处理Application_End事件的脚本。
2.Session事件
当没有会话的用户在打开应用程序的Web页时,服务器将自动的创建会话。当服务器调用Abandon方法或者页面超时时,服务器将终止该会话。会话中存在事件:Session_OnStart和Session_OnEnd。
Global.asa文件不能写成<%...%>的形式,必须使用下面所介绍的特定写法。Global.asa文件的写法如下:
<SCRIPT language="VBScript" runat="server">
Sub Application_OnStart
Application的开始程序
End Sub
Sub Application_OnEnd
Application的结束程序
End Sub
Sub Session_OnStart
Session对象的开始程序
End Sub
Sub Session_OnEnd
Session对象的结束程序
End Sub
</SCRIPT>
下面看一个使用Global.asa的具体范例,这是用于显示网站在线人数。
范例4-19:显示网站在线人数
Global.asa的代码如下:
<SCRIPT language="VBScript" runat="server">
Sub Application_OnStart
Application.Lock
Application("user_online")=0
Application.Unlock
End Sub
Sub Session_OnStart
Application.Lock
Application("user_online")= Application("user_online")+1
Application.Unlock
End Sub
Sub Session_OnEnd
Application.Lock
Application("user_online")= Application("user_online")-1
Application.Unlock
End Sub
</SCRIPT>
说明:
▲ 本文件必须放在应用程序根目录下面。
▲ Application("user_online")=0,表示在线人数初始化数为0。
▲ Application("user_online")= Application("user_online")+1,表示当一个客户登录时,在线人数加1。
▲ Application("user_online")= Application("user_online")-1,表示当一个客户退出后,在线人数减1。
在某个页面上显示在线人数,该页面要插入以下代码:
<%
Response.Write "<p align='center'>当前共有" & Application("user_online")
& "人在线"
%>
|
| FLASH版演示教案: |
| FLASH版演示教案 |
| 实训作业: |
1、输入范例4-15、4-18、4-17,并运行浏览。
2、编写显示网站在线人数程序 |
| 在线测试: |
| 在线测试 |
| 备注: |
Global.asa只能有一个,并必须放在应用程序根目录下面。 |
| 附: |
| 提高部分 |
|