第9课___Application对象与Session对象_第1页
第9课___Application对象与Session对象_第2页
第9课___Application对象与Session对象_第3页
第9课___Application对象与Session对象_第4页
第9课___Application对象与Session对象_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9.1 课前导读 9.2 课堂教学 9.3 上机练习 9.4 课后作业,第9课 Application对象与Session对象,9.1 课前导读 Application对象与Session对象的关系类似于高级语言中全局变量与局部变量的关系。 Application对象是服务器硬盘上的一组应用程序,也就是虚拟目录及其子目录下的一组主页及ASP文件。Application对象的所有数据可以在整个应用程序内部共享,并且对所有用户都是可见的;在一个Application中创建的变量或对象可以为整个Application所用;Application对象包括任何类型,甚至可以是队列。 Session对象存储特定用户的信息。不同用户的Session不同,用户之间不能共享Session,这与Application不同。,当用户浏览Web站点时,使用Session可以为每一个用户保存指定信息。任何存储在用户Session中的信息可以在用户调用下一个页面时取得。这就像是C语言里的局部变量和函数之间的关系一样,一个Session的值对于一个用户是相同的,对于不同的用户是不同的。使用Session可以在ASP文件之间传递数值、字符串、数组和对象。当用户在应用程序的页间跳转时,存储在Session对象中的变量不会清除。 Session对象在很多方面与Application对象有着相似性及可比性。虽然很相似,但是在本质上有着很大的差别。比如对于同一个页面,不同的访问者可以创建不同的Session,但是Application的值是相同的,只被创建一次。,Application对象主要被用于: 统计网站访问的人数; 统计广告点击的次数; 创建聊天室; 读取数据库中的数据等。 而Session对象则常被用在: 存储用户的首选项; 保存用户的身份标记,实现用户的身份认证和用户权限管理等。,9.2 课堂教学 9.2.1 Application对象及其使用 9.2.2 Session对象及其使用 9.2.3 Global文件,9.2.1 Application对象及其使用 1. Application对象的集合 2. Application对象的方法 3. Application对象的事件,1. Application对象的集合 ASP的Application对象有两个集合:Contents集合和StaticObject集合。Contents集合是由所有通过脚本语言添加到应用程序的变量和对象组成的集合,可以使用这个集合来获取给定的应用程序作用域的变量列表或指定某个变量为操作对象。StaticObjects集合包含所有的在Application对象的指定范围内,在Global.asa文件中由标记创建的对象。可以通过该集合来确定某个对象的指定属性或遍历所有对象的所有属性。,(1) Contents集合 Contents集合是Application对象所记录的所有非对象变量,这是Application对象默认的集合,因此下述两种格式是等价的: Application.Contents(“变量名“) Application(“变量名“) 其中,“变量名”是需要操作的Application变量名称。,【例9-1】使用Application对象编写计数器程序。 程序9_1.asp的代码如下: 使用Application变量 使用Application变量 您是第位来客 ,可以在一般变量与Application变量之间互相赋值。上述代码可以改写为: 使用Application变量 使用Application变量 您是第位来客 说明: 多次打开浏览器,运行程序9_1.asp,可以看到Application变量值的改变。, Application对象的生命周期是服务器运行期间,因此当虚拟服务器(你的PC)关机后,Application变量将丢失。要想保留变量的值,需要用到文件系统(第10课介绍)的概念。 在Contents集合中,有三种方式读取Application变量的值。 以Application.Contents(“变量名“)的形式; 以Application(“变量名“)的形式; 以所定义的Application变量序号读取,即Application.Contents(i)的形式读取,其中“i”为变量的序号。,【例9-2】使用Application变量序号读取Application变量的值,运行结果。 程序9_2.asp的代码如下: Application实例 “ then if i=0 then Application(“chinese“)=Application(“chinese“)+1 chat=“中文“ elseif i=1 then Application(“english“)=Application(“english“)+1 chat=“英文“ end if,Response.write “欢迎“ & name & “,你是来到“ Response.write “ & chat & “讨论区的第“ Response.write Application.Contents(i+1) & “位客人“ Response.write “返回“ Response.end end if % 名字: 讨论区: 中文 英文 ,说明: 对于Contents集合中的Application变量,若要遍历所有的值,还可以采用循环结构进行读取。可以采用For Each In的形式,也可以采用For To Next的形式,但是这样可能将服务器中的所有Application变量读出,因此一般不提倡使用。 如果Application对象保存有数组等项目,若采用循环结构来遍历,则会出现错误,故要慎用。 Application对象中不能保存ASP的内置对象。下述代码将引发“内部服务器错误”: Set Application.Contents(“对象“)=“Request“,(2) StaticObjects集合 Application对象的SaticObjects集合是通过标记在Global.asa文件中创建的。在StaticObjects集合中保存着所有在Application对象范围内的由标记创建的变量和对象,通过该集合,可以检索和读取这些变量和对象。在Global.asa文件中,使用如下的代码可以建立一个Application级的对象: 说明:Contents集合中可以使用的对Application变量的操作方法,在这里都可以使用。,(3) 存储数组 在Application对象中可以存储数组,但是不能直接更改存储在数组中的元素,这是因为Application对象是作为集合实现的。如果将数组存放在Application对象中,则对该数组进行操作时,应先建立数组的一个副本,对该副本操作完毕,再将其存放到Application对象中。 【例9-3】使用Application对象存储数组,运行结果。 程序9_3.asp的代码如下: 创建并使用Application数组变量 创建并使用Application数组变量, 复习指导书 创建“复习指导书”的副本 1. 2. 3. 4. ,2. Application对象的方法 Application对象共有两个方法,它们分别是Lock方法和Unlock方法。 在一个ASP应用程序中,如果同时访问的用户很多,就可能会出现很多用户同时修改某个Application变量,这时如果没有一个良好的机制来确保同一时刻仅有一个用户修改和存取Application变量,后果将是无法想像的。,Lock和Unlock方法正是为此而设计的,在使用Lock以后,可以防止其他用户修改存储在Application对象中的变量,直到用户使用Unlock方法或超时,才解开Application对象,这样就确保在同一时刻只有一个用户可以修改和存储Application对象中的变量。Lock方法和Unlock方法的语法格式分别如下: Application.Lock Application.Unlock,【例9-4】在例9-2中使用Lock方法和Unlock方法确保同一时刻只有一个用户可以修改和存储Application对象中的变量,运行结果。 程序9_2.asp改为如下的代码: Application实例 “ then Application.Lock if i=0 then Application(“chinese“)=Application(“chinese“)+1 chat=“中文“ elseif i=1 then Application(“english“)=Application(“english“)+1 chat=“英文“ end if,Response.write “欢迎“ & name & “,你是来到“ Response.write “ & chat & “讨论区的第“ Response.write Application.Contents(i+1) & “位客人“ Response.write “返回“ Application.Unlock Response.end end if % 名字: 讨论区: 中文 英文 ,3. Application对象的事件 Application对象有两个事件,OnStart事件和OnEnd事件。Application_OnStart事件是在Application对象开始时被触发,并且只在第一个用户的第一次请求时触发一次。它主要用于初始化变量、创建对象和运行其它代码。Application_OnEnd事件是在整个Application对象结束时才被触发的。当它被触发时应用程序的所有变量也相应被取消。 Application对象的Application_OnStart和Application_OnEnd事件过程只能在Global.asa文件中创建。,9.2.2 Session对象及其使用 1. Session对象的集合 2. Session对象的属性 3. Session对象的方法 4. Session对象的事件 5. Session对象与Cookie的关系,9.2.2 Session对象及其使用 Session对象是ASP技术中非常重要的对象,是实现用户会话管理的重要手段,是编写有关应用Web程序的常用工具。Session其实指的就是用户从到达某个站点直到离开为止的那段时间内,服务器端分配给用户的一个存储信息的全局变量的集合,这些变量可以是自动生成的,也可以是编程者在服务器端脚本程序中定义的。 当用户在应用程序的Web页面之间跳转时,存储在Session对象中的变量将不会丢失,而且在整个用户会话中会一直存在下去。,当用户请求ASP应用程序的某个页面时,若用户尚未建立Session对象,服务器端就会自动创建一个Session对象,并指定一个唯一的Session ID,这个ID只允许此Session ID的拥有者使用,不同的用户的Session存储着各自特定的信息,如用户姓名、性别、浏览器类型、显示器分辨率、访问时间等,这将有利于服务器对用户身份的鉴别,从而实现Web页面的个性化。,Session对象有两种结束方法:一种是隐式方式,另一种是显式方式。隐式方式是当用户访问Web服务器的时间间隔超过Session对象的TimeOut属性设置的时间限制时,Session对象自动结束;显式方式则是利用Session对象的Abandon方法来中止Session。当Session结束之后,Session对象的变量也将被释放,其值不可再用。,1. Session对象的集合 与Application对象一样,Session对象也有两个集合:Contents集合和StaticObjects集合。其中,Contents集合保存所有非对象的Session变量,而StaticObjects集合则保存所有的Session对象变量。 (1) Contents集合 Contents集合是使用Session对象定义的在ASP应用程序中的一组变量。这些变量的作用域为用户层,并且在整个ASP应用程序都是可用的。这是Session对象默认的集合,因此下述两种格式是等价的: Session.Contents(“变量名“) Session (“变量名“) 其中,“变量名”是需要操作的Session变量名称。,【例9-5】使用Session对象编写例9-1中的计数器程序。程序9_5.asp的代码如下: 使用Session变量 使用Session变量 您是第次来访! 打开浏览器,执行程序9_5.asp,显示“您是第1次来访!”,单击“刷新”按钮,可以看到来访次数增加。重新打开一个浏览器,再次执行程序9_5.asp,仍然显示“您是第1次来访!”。这是因为每个浏览器都有自己的Session对象。,Session对象的Contents集合除了可以创建、调用变量,还可以创建对象,但是由于对象所占用的资源很多,所以在使用Session对象的Contents集合创建对象要慎重,但是你一旦建立一个Session对象,则可以在整个ASP应用程序中都可以调用。 Session对象也可以存放数组,其方法与Application对象一样,不再赘述。,与Application对象一样,在Contents集合中,无论是一般的Session变量,还是Session对象,或者是数组,都可以采取以下三种方式读取Session值。 以Session.Contents(“变量名“)的形式; 以Session(“变量名“)的形式; 以所定义的Session变量或对象序号读取。 以上三种方式虽然方法不同,但所得结果是一致的。,(2) SaticObjects集合 Session对象的SaticObjects集合是通过标记在Global.asa文件中创建的。在StaticObjects集合中保存着所有在Session对象范围内的由标记创建的变量和对象,通过该集合,可以检索和读取这些变量和对象。 在Global.asa文件中,使用如下代码可以建立一个Session级的对象: 然后即可以使用Session对象的SaticObjects集合来引用了。当然,Session对象的Contents集合可以使用的方法,在这里都可以使用。,(3) 与Application对象的比较 从上述例子来看,Application对象和Session对象的使用似乎一样,其实它们是由区别的。它们的区别就在于Application对象的变量是多用户共享的,而Session对象的变量是针对某一特定用户的。随着一次会话的结束,Session对象的变量也就取消了。但是Application对象的变量不会因为某一个甚至全部用户的离开而消失,它一旦被建立,直到网站关闭或者这个Application被卸载才被取消。,考虑例9_1中的计数器,该计数器有一个缺点:只要浏览者反复单击“刷新”按钮,访客人数就会一直累计。这是不合理的,有时网站举办赠奖活动:第10万位上站者可以获得奖品,那么投机者就会连续单击“刷新”按钮,直到成为获奖者。为了避免这种现象,可以结合Session变量,改写如下。,【例9-6】结合使用Session对象改写例9-1中的计数器程序。 使用Application与Session变量 使用Application与Session变量 您是第位来客 程序9_6.asp的运行结果如图9-4所示。现在,只有重新打开浏览器运行该程序,才能使访客人数增加了。,2. Session对象的属性 Session对象共有四种属性,它们分别是:SessionID属性、TimeOut属性、LCID属性和CodePage属性。通过对这些属性的设置,可以实现对用户身份的标识,刷新时间的限定,日期、时间、货币显示格式的控制等。 (1) SessionID属性 SessionlD属性返回Session的标识ID。在每一个Web站点,Web服务器的IIS为了能够跟踪访问者,在每一个用户刚登录时,服务器给用户分配的唯一的标识号ID,该ID以长整型数据表示。,SessionlD惟一地标识了一个特定的用户,在新的Session开始前,Web服务器将SessionlD存储在客户端的浏览器中,以便下次访问服务器时提交给Web处理程序,Web处理程序根据这个SessionID找到服务器中以前储存的信息并使用它。 Session对象的SessionID属性是一个只读的属性,它一般在是IIS在内部使用,以识别在Session中的访问者,也可用于Web页面的注册统计。 语法格式: Session.SessionID 可以使用下面的方法来访问SessionID的值: 或是 ,(2) TimeOut属性 对于一个登录到ASP应用程序的用户,如果用户在系统默认的时间内未进行其它任何操作时,当设置的时间一到便自动撤销这个用户的Session,这样就可以防止系统的资源被浪费。 Session对象的TimeOut属性可以用来设置“过期时间”,当浏览器在TimeOut属性设置的时间段里没有提出任何请求,Web服务器就会中断与该使用者间的连线。属性的设置格式为: Session.TimeOut=MaxTime 其中,MaxTime是会话超时的时间,以分钟计。,(3) LCID属性 Session对象LCID属性可以用来设置动态的文本内容显示时所使用的格式,如时间、日期、数字、货币等等。这个属性主要是针对不同国家的用户在访问时,时间、日期、数字、货币等等显示格式的不同习惯而做相应的设置,一经设定,在整个ASP应用程序中都依照此设定来显示。其语法格式如下: Session.LCID=LocalID 其中,LocalID是所设定的区域码,它是一个整型数字。如 Session.LCID=1033 表示按照美国的习惯显示。通过这个属性,可以制作一个国际化的Web站点。,(4) CodePage属性 Session对象的CodePage属性可以用来设置ASP应用程序所使用的字库,在不同的字库中,所包含的字符是不同的,每一个国家都有不同的字库,即使同一国家也有着不同的字库,它包含有不同的数字、字母和其它字符。这个属性主要是针对不同国家的用户在访问时,显示所用字符的不同而做相应的设置,一经设定,在整个ASP应用程序中都依照此设定来显示。其语法格式如下: Session.CodePage=CodeID 其中,CodeID是所设定的区域码,它是一个整型数字。如 Session.CodePage=936 表示使用汉字国标字库显示。,3. Session对象的方法 Session对象的方法见表9-1。 表9-1 Session对象的方法,我们知道,Session对象默认的生命周期起始于浏览器第一次与服务器联机时,终止于浏览器结束联机时,或浏览器超过20分钟没有存取网页。由于Session对象存储在服务器的内存,所以一旦联机的浏览器越多,网页的执行效能就越低,为了不影响执行效能,最好在确定不需要用到Session对象的时候(例如浏览者注销网页),便以手动的方式结束Session对象,这需要调用Session对象的Abandon方法: Session.Abandon 说明:Session对象的Abandon方法只是用来取消Session变量,并不取消Session对象本身,Session变量的清除亦是在本脚本执行完以后才进行的。,4. Session对象的事件 Session对象有Session_OnStart和Session_OnEnd两个事件,它们分别用于Session对象的启动和结束时的运行过程。在一个Session开始时,Session_OnStart事件被触发;而在一个Session结束时,Session_OnEnd事件被触发。,5. Session对象与Cookie的关系 Session数据存储在服务器上,Cookie数据是存储在浏览器本机里的。没有人可以通过查看Cookie来得到你的Session里的内容,这是因为,每一个Session都对应一个由Web服务器指定的唯一识别符SessionlD,在浏览器中使用Cookie来存储这个SessionID,真正的数据还是存储在Web服务器上的。如果浏览器不支持使用Cookie,或者浏览器设置为不接受Cookie,那么将不能使用Session。,当用户第一次请求ASP应用程序中的某个页面时,ASP要检查HTTP请求头信息,查看是否有名为ASPSESSIONID的Cookie发送过来。如果有,则服务器会启动新的对话,并为该对话生成一个全局唯一的值,即SessionID,再把这个值作为新的ASPSESSIONID Cookie值发送给客户端。使用这种Cookie,可以防问存储在服务器上的属于客户程序的有关信息。 Session对象最常见的作用就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。另外Session还经常被用在判别客户身份的程序中。要注意的是,对话状态仅在支持Cookie的浏览器中保留,如果客户关闭了Cookie选项,Session也就不能发挥作用了。,在IE6.0中,点击“工具”菜单中的“Intenet选项”菜单项,打开“Intenet选项”对话框,选择“隐私”选项卡,单击其中的“高级”按钮,如图9-5左所示。,图9-5 关闭cookie,在打开的“高级隐私策略设置”对话框中选中“覆盖自动cookie处理”复选框,然后选择“拒绝”选项,如图9-5右所示。单击“确定”按钮返回浏览器。此时,已经关闭了cookie,不仅第5课中有关cookies的例题不能正常运行,再次运行例9-5,看到Session变量也不能发挥作用了。,9.2.3 Global文件 1. Global.asa文件 2. Global.asa文件的结构 3. 一个Global.asa文件的实例,9.2.3 Global文件 Global文件是一个可选文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象。该文件的内容不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象。 Global文件的名称必须是Global.asa且必须存放在应用程序的根目录中,并且每个应用程序只能有一个Global.asa文件。,1. Global.asa文件 Global.asa文件是ASP应用程序中使用到的一个特殊的文件,它是一个纯文本的文件。Global.asa文件中存放着ASP应用程序运行期间所需的Application对象和Session对象的事件,即Application_OnStart事件、Application_OnEnd事件、Session_OnStart事件和Session_OnEnd事件。另外,在Global.asa文件中还存放有标记声明的对象。 可以用任何支持脚本的语言编写Global.asa文件中包含的脚本。如果多个事件使用同一种脚本语言,就可以将它们组织在一组标记中。,在Global.asa文件中,如果包含的脚本没有用标记封装,或定义的对象没有指定作用域为会话或应用程序,则服务器将返回错误。 在Global.asa文件中声明的过程只能从一个或多个与Application_OnStart、Application_OnEnd、Session_OnStart和Session_OnEnd事件相关的脚本中调用。在基于ASP的应用程序的ASP页中,它们是不可用的。如果要在应用程序之间共享过程,可在单独的文件中声明这些过程,然后使用服务器端包容(SSI)语句将该文件包含在调用该过程的ASP程序中。通常,包含文件的扩展名应为.inc。,2. Global.asa文件的结构 在Global.asa文件中,所有的代码必须用和标记来界定,而不能使用标记。在和标记间可以使用任何脚本语言来书写,当然要安装相应的脚本引擎。并且要用诸如注明。下面给出Global.asa文件的基本结构。, Sub Application_OnStart End Sub Sub Session_OnStart End Sub Sub Session_OnEnd End Sub Sub Application_OnEnd End Sub ,说明: 标记用来声明对象,其中RunAt=Server是必须的,且其值只能是Server,它表明这个Object只能在服务器上执行;“范围”表明本对象的使用用户,当Scope=Session时,表明本对象只给此次登录的用户使用,若Scope=Application,则可以让所有联机用户使用;“名称”是为对象定义的名称;“类名”是该对象的类名称。, 指明所使用的语言为VBScript,程序在服务器端处理。 Sub Application_OnStartEnd Sub指明应用程序开始时所要执行的代码。 Sub Session_OnStartEnd Sub指明一个Session开始时所要执行的代码。 Sub Session_OnEndEnd Sub指明一个Session结束时所要执行的代码。 Sub Application_OnEndEnd Sub指明一个应用程序结束时所要执行的代码。,3. 一个Global.asa文件的实例 下面代码是一个Global.asa文件的实例: Sub Session_OnStart 建立一个数据库连接 Set cn = Server.CreateObject(“ADODB.Connection“) cn.Provider = “sqloledb“ ProvStr = “Server=Your_SQL_Server_Name;Database =Northwind;UID=sa;PWD=;“ cn.Open ProvStr Set Session(“cnn“) = cn END Sub Sub Session_OnEnd 断开数据库连接 cn.Close END Sub ,9.3 上机练习 【练习9-1】统计在线用户。 在线用户是指当前正在网上浏览网页的用户。 创建lx9_1.asp文件。代码如下: 显示在线人数 欢迎光临本网站,当前共有人在线 说明:代码Session.timeout=1表示当浏览器端在1分钟内没有提出任何请求,该次对话将被终止。, 创建global.asa文件,并将其存放在虚拟目录的根目录中。程序如下: Sub Application_onStart Application(“OnLine“)=0 当服务器启动时, 将记录在线用户的Application(“OnLine“)清零 End Sub Sub Session_onStart Application.Lock Application(“OnLine“)=Application(“OnLine“)+1 新增在线用户个数 Application.Unlock End Sub Sub Session_OnEnd Application.Lock Application(“OnLine“)=Application(“OnLine“)-1 减少在线用户个数 Application.Unlock End Sub ,说明:Session_OnStart事件将在一个用户首次访问目前站点时唯一调用。Session_OnEnd事件将在Session过期或用户主动释放Session时调用。,【练习9-2】猜数游戏。如图9-7所示,计算机随机产生一个100以内的整数,等待你去猜。 程序lx9_2.asp的代码如下: Sub init() frm1.number.Focus 文本框取得焦点 frm1.number.select 文本框内容被选中 End Sub 猜数游戏 猜数游戏 % if not IsNumeric(Request(“Number“) then GuessNum=0 else GuessNum=Cint(Request(“Number“) end if Session(“Count“)=Session(“Count“)+1,if GuessNum=0 then session(“Count“)=0 Randomize session(“Number“)=Int(rnd*100+1) end if response.write “请输入1-100之间的整数:“ response.write “ response.write “ response.write “ “ if session(“Count“)0 then if GuessNumsession(“Number“) then response.write “你猜的太大了“ elseif GuessNum“ elseif GuessNum=session(“Number“) then response.write “祝贺你,猜对了“ end if end if Response.write “共猜了“ & Session(“Count“) & “次“ if Session(“Count“)=10 then Response.write “,答案是“ & Session(“Number“) end if %,重新猜 说明:其中使用了Session对象的两个Session变量。Session(“Count“)变量保存猜数的个数;Session(“Number“)变量保存计算机产生的随机数。,【练习9-3】显示网页的在线名单。 执行程序“lx9_3.asp”(如图9-8左)并输入用户名称之后,调用另一个程序“lx9_3_1.asp”,如果有其他

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论