1、本章导读本章导读Session对象对象1Application对象对象2Global.asa文件文件3本章导读:本章导读:在在Web应用程序中,应用程序中,Session对象在服务器端存储用户个体滞留期间的信对象在服务器端存储用户个体滞留期间的信息,以作为服务器跟踪特定用户持续请求的确认信息。息,以作为服务器跟踪特定用户持续请求的确认信息。Session对象信赖对象信赖客户端浏览器客户端浏览器cookies的支持,如果客户关闭了的支持,如果客户关闭了cookies选项,选项,Session对象也就不能发挥作用。而对象也就不能发挥作用。而Application对象则实现站点内所有用户在所对象则实
2、现站点内所有用户在所有页面之间共享有页面之间共享Application对象变量信息。对象变量信息。本章要点:本章要点:7.1 Session对象概述v7.1.1 Session对象语法简介v7.1.2 利用Session对象的数据集合v7.1.3 Session对象的属性v7.1.4 Session对象的方法v7.1.5 Session对象的事件 7.1.1 Session对象语法简介vSession对象总是开始于每个客户的每次请求对象总是开始于每个客户的每次请求的第一个页面,的第一个页面,Web服务器自动创建该客户一个服务器自动创建该客户一个独立的独立的Session对象,它将一直保留到联机
3、结束对象,它将一直保留到联机结束或指定的时间内用户没有刷新或请求网页为止。或指定的时间内用户没有刷新或请求网页为止。语法格式如下:语法格式如下:Session.collection|property|method|_event 7.1.1 Session对象语法简介说明:说明:property表示属性,表示属性,session对象属性主要有对象属性主要有4个,个,如表如表7-1所示。所示。属性属性功功 能能CodePage字符串编码及转换的字符集代号LCID设置地区标识符,决定显示动态内容的位置标识SessionID用户会话标识,服务器为每一次持续会话分配一个单独的标识Timeout应用程序会
4、话状态的超时时限,以分钟为单位,系统默认为20分钟表表7-1 session对象属性对象属性7.1.1 Session对象语法简介说明:说明:collection表示数据集合,表示数据集合,session对象数据集合有对象数据集合有2个,如表个,如表7-2所示。所示。数据集合数据集合功功 能能Contents对象的默认集合,保存非标记创建的具有Session作用域的变量信息StaticObjects保存global.asa文件中用标记创建的具有Session作用域的对象实例表表7-2 session对象数据集合对象数据集合7.1.1 Session对象语法简介说明:说明:method表示方法,
5、表示方法,session对象方法主要有对象方法主要有3个,个,如表如表7-3所示。所示。方方 法法功功 能能Abandon是Session对象唯一的方法,用于清除Session对象并释放其资源Contents.Remove是Session.Contents的方法,用于删除Contents集合中一个项目Contents.RemoveAll是Session.Contents的方法,用于删除Contents集合中所有项目表表7-3 session对象方法对象方法7.1.1 Session对象语法简介说明:说明:_event表示事件,表示事件,session对象事件主要有对象事件主要有2个,如个,如表
6、表7-4所示。所示。事件事件功功 能能Session_OnStart当ASP用户会话启动时,触发Session_OnStart事件Session_OnEnd当ASP用户会话结束时,触发Session_OnEnd事件表表7-4 session对象事件对象事件7.1.2 利用Session对象的数据集合v利用利用Contents数据集合和数据集合和StaticObjects数据数据集合来存储访问者的临时会话信息。集合来存储访问者的临时会话信息。利用利用Contents数据集合存储变量和常量信息数据集合存储变量和常量信息使用使用Session的的Contents集合可以存储变量和常集合可以存储变量和
7、常量信息,其语法格式如下:量信息,其语法格式如下:格式:格式:session.contents(sessionname)=value7.1.2 利用Session对象的数据集合说明:说明:sessionname是数据集合中的成员名,是数据集合中的成员名,或称为变量名;或称为变量名;value是数据集合中的成员存储的对应值,是数据集合中的成员存储的对应值,或称为变量值;或称为变量值;contents是是session对象默认集合,实对象默认集合,实际应用时可以省略。际应用时可以省略。7.1.2 利用Session对象的数据集合 利用利用Contents数据集合存储数组信息数据集合存储数组信息Se
8、ssion对象把数组当成一个整体看待,只能把对象把数组当成一个整体看待,只能把一个数组整体存入或者取出,用户不能直接更改一个数组整体存入或者取出,用户不能直接更改Session对象数据集合中存储的数组元素的值。对象数据集合中存储的数组元素的值。7.1.2 利用Session对象的数据集合另外contents数据集合还有自己的属性和方法,分别如下:Count属性,返回Contents数据集合中成员的统计总数,是一个整数值,其语法 格式如下:Item属性,设置或返回Contents数据集合中一个特定成员存储的对应值,其语法格式如下:session.contents.item(index)=var_
9、valuevar_value=session.contents.item(index)其中,参数index表示一个特定成员的成员名,或其在数据集合中的排列序号。Key属性,返回Contents数据集合中一个特定成员的成员名,其语法格式如下:var_name=session.contents.key(index)Remove方法,该方法从Contents数据集合中删除一个已定义的变量,其语法格式如下:session.contents.remove(var_name)其中var_name的数据类型为variant,表示要从contents数据集合中删除的变量名称。RemoveAll方法,该方法从C
10、ontents数据集合中删除所有定义的变量而不终止当前的会话,其语法格式如下:session.contents.removeall()7.1.2 利用Session对象的数据集合 利用利用Contents数据集合存储对象实例信息数据集合存储对象实例信息 不仅可以将标量和数组存储在不仅可以将标量和数组存储在Session对象的对象的 Contents数据集合中,也可以在数据集合中,也可以在Global.asa文件的文件的Application_Onstart和和Session_Onstart事件中,事件中,存储用存储用Server.Createobject方法建立的具有方法建立的具有Sessio
11、n作用域的对象实例。作用域的对象实例。7.1.2 利用Session对象的数据集合 利用利用StaticObjects数据集合存储对象实例信息数据集合存储对象实例信息Session.StaticObject数据集合也能存储对象实数据集合也能存储对象实例,不过需要注意的是:例,不过需要注意的是:Session.StaticObjects数据集合存储的是在数据集合存储的是在Global.asa文件中使用文件中使用HTML的的标记建立的具有标记建立的具有Session作用域的对作用域的对象实例。象实例。7.1.2 利用Session对象的数据集合利用利用Staticobjects数据集合存储对象实例
12、数据集合存储对象实例在在Global.asa文件中,使用文件中,使用HTML的的标记创建具有标记创建具有Session作用作用域的对象实例时,将域的对象实例时,将Scope属性设置为属性设置为“Session”,并使用该对象的,并使用该对象的Progid(程序序号程序序号)或或Classid(类序号类序号)属性。属性。如果使用如果使用progid,其语法结构如下:,其语法结构如下:如果使用如果使用classid,其语法结构如下:,其语法结构如下:引用引用StaticObjects数据集合数据集合StaticObjects数据集合可以用于确定数据集合可以用于确定Session对象特定的对象实例变
13、量名,对象特定的对象实例变量名,或者用于遍历或者用于遍历StaticObjects数据集合并获取所有对象实例变量的对应值。语数据集合并获取所有对象实例变量的对应值。语法格式如下:法格式如下:session.staticobjects(obj)7.1.3 Session对象的属性 Session.SessionID只读,长整型,返回本次会话的惟一标识符,是只读,长整型,返回本次会话的惟一标识符,是在用户登录时由服务器自动生成和分配的临时会在用户登录时由服务器自动生成和分配的临时会话标识符。其语法格式如下:话标识符。其语法格式如下:格式:格式:说明:一般不用显示,隐藏于页面之中。说明:一般不用显示
14、,隐藏于页面之中。7.1.3 Session对象的属性 Session.TimeOut读读/写,整型,返回或设置写,整型,返回或设置session对象变量的生存期,对象变量的生存期,默认值为默认值为20分钟。如果用户在分钟。如果用户在session对象变量的生存对象变量的生存期之内不刷新或请求网页,则期之内不刷新或请求网页,则session对象变量(会话)对象变量(会话)将终止。将终止。修改修改session变量的生存期有两种方法:在变量的生存期有两种方法:在IIS组件中组件中修改,参照修改,参照6.1.2节的图节的图6-1【应用程序配置应用程序配置】对话框中对话框中的的【启用会话状态启用会话
15、状态(s)】选项;利用选项;利用session.对象的对象的timeout属性。语法格式如下:属性。语法格式如下:格式:格式:7.1.3 Session对象的属性 Session.CodePage读读/写,整型,返回和设置字符编码的代码页,默认值写,整型,返回和设置字符编码的代码页,默认值为为936,即简体中文。用于确保脚本解释生成的结果输出,即简体中文。用于确保脚本解释生成的结果输出时,选择适合用户本地识别的字符集。不同的语言和场所时,选择适合用户本地识别的字符集。不同的语言和场所可能使用不同的代码页。例如,如代码页可能使用不同的代码页。例如,如代码页1262用于美国用于美国英语和大多数欧洲
16、语言,代码页英语和大多数欧洲语言,代码页932用于日文。语法格式用于日文。语法格式如下:如下:格式:格式:说明:也可以在说明:也可以在ASP文件的最前面定义代码页,语法格文件的最前面定义代码页,语法格式如下:式如下:7.1.3 Session对象的属性 Session.LCID读读/写,整型,返回和设置用户本地浏览器的地区代码写,整型,返回和设置用户本地浏览器的地区代码LCID(local identifier,唯一标识地区的一个国际标,唯一标识地区的一个国际标准缩写)。默认值为准缩写)。默认值为2052,即中国。影响脚本输出如何,即中国。影响脚本输出如何格式化数字、货币、日期和时间之类的元素
17、。例如,格式化数字、货币、日期和时间之类的元素。例如,2067定义当前地区的货币符号是定义当前地区的货币符号是“”。语法格式如下:。语法格式如下:格式:格式:说明:也可以在说明:也可以在asp文件的最前面定义代码页,语法格文件的最前面定义代码页,语法格式如下:式如下:7.1.4 Session对象的方法vsession对象的方法只有一个,即对象的方法只有一个,即session.abandon,可以释放清除所有用户,可以释放清除所有用户的的session对象变量并触发对象变量并触发session_onend事件。当然如果没有明确调用事件。当然如果没有明确调用abandon方法,方法,一旦会话超时
18、或会话页面关闭时,服务器也会一旦会话超时或会话页面关闭时,服务器也会将删除这些对象并释放资源。语法格式如下:将删除这些对象并释放资源。语法格式如下:格式:格式:7.1.4 Session对象的方法v注意:调用注意:调用session.abandon方法后,当前方法后,当前页面没有处理完毕之前,它不会立即清理页面没有处理完毕之前,它不会立即清理Session对象变量,即对象变量,即session.abandon之之后的代码,仍然能访问已经存在的后的代码,仍然能访问已经存在的Session对对象变量,直到该页面完全执行(关闭),再次象变量,直到该页面完全执行(关闭),再次刷新页面,或者访问其他页面
19、,刷新页面,或者访问其他页面,Session对象对象变量才会真正释放。变量才会真正释放。7.1.5 Session对象的事件v事件是一种程序运行机制,特点是,当某种情事件是一种程序运行机制,特点是,当某种情况发生,就会自动执行一段代码。况发生,就会自动执行一段代码。Session对对象提供了两个事件:分别是启动时触发的象提供了两个事件:分别是启动时触发的Session_OnStart事件和结束时触发的事件和结束时触发的Session_OnEnd事件。有关事件。有关Session对象的对象的事件的详细信息请参阅事件的详细信息请参阅7.3节。节。7.2 Application对象概述v7.2.1
20、Application对象语法简介v7.2.2 使用Application对象的数据集合v7.2.3 使用Application对象方法v7.2.4 使用Application对象事件 7.2.1 Application对象语法简介vApplication对象允许在指定的应用程序内的所有用户对象允许在指定的应用程序内的所有用户共享信息,并在服务器运行期间持久的保存数据。而且,共享信息,并在服务器运行期间持久的保存数据。而且,Application对象还有控制访问应用层数据的方法和可对象还有控制访问应用层数据的方法和可用于在应用程序启动和停止时触发过程的事件。通过调用于在应用程序启动和停止时触发
21、过程的事件。通过调用该对象的用该对象的Lock和和Unlock方法能够确保多个用户无法方法能够确保多个用户无法同时改变某一属性。同时改变某一属性。Application对象主要用于:统计网站访问的人数;对象主要用于:统计网站访问的人数;统计广知点击的次数;创建聊天室;读取数据库统计广知点击的次数;创建聊天室;读取数据库中的数据等。中的数据等。其语法格式如下:其语法格式如下:格式:格式:Application.collection|method|_event7.2.1 Application对象语法简介说明:说明:collection表示数据集合,表示数据集合,Application对象数据集对
22、象数据集合有合有2个,如表个,如表7-6所示。所示。表表7-6 Application对象数据集合对象数据集合 数据集合数据集合功功 能能Contents对象的默认集合,保存非标记创建的具有Application作用域的变量信息StaticObjects保存global.asa文件中用标记创建的具有Application作用域的对象实例7.2.1 Application对象语法简介说明:说明:method表示方法,表示方法,Application对象方法主要有对象方法主要有4个,个,如表如表7-7所示。所示。表表7-7 Application对象方法对象方法方方 法法功功 能能Lock禁止别的
23、使用者修改Application的信息Unlock允许别的使用者修改Application的信息Contents.Remove是Application.Contents的方法,用于删除Contents集合中一个项目Contents.RemoveAll是Application.Contents的方法,用于删除Contents集合中所有项目7.2.1 Application对象语法简介说明:说明:(3)_event表示事件,表示事件,Application对象事件有对象事件有2个,如个,如表表7-8所示。所示。表表7-8 Application对象事件对象事件事件事件功功 能能Applicatio
24、n_OnStart当Web服务器启动后,第一个Session会话产生请求时触发 Application_OnEnd最后一个用户会话(Session_OnEnd事件)已经结束之后发生触发 7.2.2 使用Application对象的数据集合v Application对象的数据集合使用方法同对象的数据集合使用方法同Session对象对象的数据集合一样,可以将变量、常量、数组等信息保存在的数据集合一样,可以将变量、常量、数组等信息保存在Application对象中。对象中。利用利用Application.Contents存储简单信息存储简单信息 利用利用Application.Contents存储数
25、组信息存储数组信息 Application对象把数组当成一个整体看待,只能把一对象把数组当成一个整体看待,只能把一 个数组整体存入或者取出,用户不能直接更改个数组整体存入或者取出,用户不能直接更改Application对象变量中存储的数组元素的值。对象变量中存储的数组元素的值。另外,另外,Application.Contents数据集合也有同数据集合也有同Session.Contents数据集合一样的属性和方法,其使数据集合一样的属性和方法,其使用方法也同用方法也同Session.Contents数据集合相同。数据集合相同。7.2.2 使用Application对象的数据集合 利用利用Appl
26、ication.Contents存储对象实例存储对象实例 同同Session对象一样,不仅可以将标量和数组存储在对象一样,不仅可以将标量和数组存储在Application对象的对象的Contents数据集合中,也可以在数据集合中,也可以在global.asa文件的文件的Application_OnStart和和Session_OnStart事件中,存储用事件中,存储用Server.CreateObject方法建立的对象实例。方法建立的对象实例。7.2.2 使用Application对象的数据集合利用利用Application.StaticObjects存储对象实例存储对象实例 Applicat
27、ion.StaticObjects数据集合存储在数据集合存储在Global.asa文件中使用文件中使用标记标记创建具有创建具有Application作用域的对象实例变量。作用域的对象实例变量。利用利用StaticObjects数据集合存储对象实例数据集合存储对象实例在在Global.asa文件中,使用文件中,使用HTML的的标记创建具有标记创建具有Application作用域的对作用域的对象实例时,将象实例时,将Scope属性设置为属性设置为“Application”,并使用该对象的,并使用该对象的ProgID(程序序号程序序号)或或ClassID(类序号类序号)属性。属性。如果使用如果使用P
28、rogID,其语法结构如下:,其语法结构如下:如果使用如果使用ClassID,其语法结构如下:,其语法结构如下:引用引用StaticObjects数据集合数据集合StaticObjects数据集合可以用于确定某数据集合可以用于确定某Application对象的变量名,或者用于遍历对象的变量名,或者用于遍历StaticObjects数据集合并获取所有对象实例,语法格式:数据集合并获取所有对象实例,语法格式:Application.StaticObjects(obj)7.2.3 使用Application对象方法vApplication对象提供了两种方法,分别用于锁定对象对象提供了两种方法,分别用
29、于锁定对象的的Lock方法和解锁对象的方法和解锁对象的Unlock方法。方法。Application.LockLock方法是禁止其他用户同时修改方法是禁止其他用户同时修改Application对象变对象变量的值,确保在同一时刻仅有一个客户可修改和存取量的值,确保在同一时刻仅有一个客户可修改和存取Application变量,以保证数据的完整性和一致性。如果变量,以保证数据的完整性和一致性。如果用户没有明确调用用户没有明确调用Unlock方法,则服务器将会在方法,则服务器将会在.asp文文件结束或超时后即解除对件结束或超时后即解除对Application对象的锁定。对象的锁定。Applicatio
30、n.Unlock与与Lock方法相反,方法相反,Unlock方法是允许其他用户修改方法是允许其他用户修改Application对象的属性。对象的属性。7.2.4 使用Application对象事件vApplication对象提供了两个事件:分别是启对象提供了两个事件:分别是启动时触发的动时触发的Application_OnStart事件和结事件和结束时触发的束时触发的Application_OnEnd事件。有关事件。有关Application对象的事件的详细信息请参阅对象的事件的详细信息请参阅7.3节。节。7.3 Global.asa文件vGlobal.asa(扩展名(扩展名asa是是Acti
31、ve Server Appliaction的英的英文缩写)文件是一个比较特殊的文件,它位于网站的根目录,或是虚文缩写)文件是一个比较特殊的文件,它位于网站的根目录,或是虚拟目录的根目录。基本意思是全局的活动的服务器应用程序,主要用拟目录的根目录。基本意思是全局的活动的服务器应用程序,主要用于跟踪管理于跟踪管理application对象和对象和session对象的事件,其中定义了具对象的事件,其中定义了具有会话(有会话(session)和应用程序()和应用程序(application)作用域的变量。)作用域的变量。Global.asa文件是一个公共共享文件,但其内容不能通过浏览器文件是一个公共共
32、享文件,但其内容不能通过浏览器URL地址下载(输出显示)的,每个网站只能有一个地址下载(输出显示)的,每个网站只能有一个Global.asa文文件,用来存储公共变量,一般包含以下内容:件,用来存储公共变量,一般包含以下内容:Application事件。事件。Session事件。事件。的声明。的声明。类库的声明。类库的声明。7.4 获取Contents数据集变量v 在程序实际调试中,有时候有必要知道有哪些在程序实际调试中,有时候有必要知道有哪些Seesion.Contents变量和变量和Application.Contents变量在使用,其值分别是什么,由于变量在使用,其值分别是什么,由于Ses
33、sion.Contents和和Application.Contents数据数据集合变量名有可能是对象实例也有可能是数组,必须对集合变量名有可能是对象实例也有可能是数组,必须对其进行特殊的处理。一般通过其进行特殊的处理。一般通过For Each 循环可以访问循环可以访问数据集合来依次获取所有的变量。数据集合来依次获取所有的变量。7.5 本章小节vSession对象存储客户端浏览器和服务器之间对象存储客户端浏览器和服务器之间的持续互动状态信息,的持续互动状态信息,Session和用户个体之和用户个体之间保持的是一对一的关系。间保持的是一对一的关系。Application对象对象实质就是用来实现某一特定功能的实质就是用来实现某一特定功能的Web应用程应用程序,用来存储用户群体的共享信息,并可在服序,用来存储用户群体的共享信息,并可在服务器运行期间持久地保持数据。务器运行期间持久地保持数据。