3.5 Session对象

Session指访问者从登录某个特定主页到离开为止的期间。Session对象存储特定的用户会话所需的信息(实例对象或变量)。当用户在应用程序的页面之间跳转时,存储在Session对象中的变量不会丢失,而用户在应用程序中访问页面时,这些变量始终存在。在绝大多数情况下,用Session对象当作全局变量,用于在该应用的所有页面中共享信息。Session对象最典型应用就是在网上购物中创建虚拟购物袋,用来记录某个用户进入各网页挑选的所有产品信息。另外还经常被用在验证客户身份的程序中。

当用户请求,如该用户还没有会话,则Web服务器将自动创建一个Session对象。在默认情况下,如果没有用户请求,则服务器只保留Session 20分钟。用户也可以通过设置Session的属性TimeOut来改变Session对象。或调用Session.Abandon方法来释放Session对象。通过向客户程序发送唯一的Cookie可以管理服务器上的Session对象。要注意的是,会话状态仅在支持Cookie的浏览器中保留,如果客户关闭了Cookie选项,Session也就不能发挥作用了。

语法格式:Session.属性|方法|事件

3.5.1 Session属性

Session的属性有两个。

(1)SessionID属性。SessionID是在创建会话时,由服务器为每一个会话生成的唯一标识。会话标识以长整形数据类型返回。SessionID多用于Web页面注册统计。

(2)TimeOut属性。TimeOut属性是以分钟为单位为会话定义的超时时限。如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。如将时限设为10分钟的代码为:

除了以上两个内置的属性外,类似于Application对象,用户也可自定义Session的属性(或称Session变量)。将网页变量或对象实例存储到Session对象中的语法格式为:

将存储在Session对象中网页变量或对象实例还原回来的语法格式为:

3.5.2 Session方法

Session对象唯一的方法是Abandon()方法。该方法用来消除用户的Session对象并释放其所占的资源。如果用户没有明确地调用Abandon方法,一旦会话超时,服务器也将删除这些对象并释放资源。当服务器处理完当前页时,下面示例将释放会话状态。

3.5.3 Session事件

Session对象有两个事件可用于Session对象的启动和释放。

(1)Session_OnStart事件。该事件在服务器创建新的会话时发生。服务器在执行请求的页之前先处理该脚本。Session对象的OnStart事件中的代码被保存在Global.asa文件中。

为了确保用户在打开某个特定的Web页时始终启动一个会话,就可以在Session On-Start事件中调用Redirect方法。当用户进入应用程序时,服务器将为用户创建一个会话并处理Session_OnStart事件脚本。可以将脚本包含在该事件中以便检查用户打开的页是不是启动页,如果不是,就指示用户调用Response.Redirect方法启动网页。程序代码如下:

上述程序只能在支持Cookie的浏览器中运行。因为不支持Cookie的浏览器不能返回Cookie,所以每当用户请求Web页时,服务器都会创建一个新会话。这样,对于每个请求服务器都将处理Session OnStart脚本并将用户重定向到启动页中。

(2)Session_OnEnd事件。该事件在会话被放弃或超时调用了Session对象的Aban-don方法时被触发。Session_OnEnd事件同样被保存在Global.asa文件中。

会话可以通过以下三种方式启动。

(1)一个新用户请求访问一个URL,该URL标识了某个应用程序中的.asp文件,并且该应用程序的Global.asa文件包含Session OnStart过程。

(2)用户在Session对象中存储了一个值。

(3)用户请求了一个应用程序的.asp文件,并且该应用程序的Global.asa文件使用<OBJECT>标签创建带有会话作用域的对象的实例。

Application对象和Session对象是在Web页面特别是基于Web的BBS或聊天室上经常使用的ASP内建对象,这两个对象在实际运用中很实用。

3.5.4 Session与Application比较

通过对Application和Session对象的比较,可以发现两者的异同之处。

相同点:

(1)两者都可自定义属性并且都可对对象中的变量及对象实例进行存取。

(2)两者都有生命周期和作用域,并且都有On_Start和On_End事件。

(3)两者都是ASP文件共用的对象。

不同点:

(1)两者的起始及终止时间不同,Session对象开始于链接者第一次链接时,终止于链接者在若干时间内没有索取过任何信息;Application对象开始于IIS/PWS开始执行且出现第一个链接者的时候,终止于若干时间内没有任何链接者索取过信息,或IIS/PWS关闭。

(2)两者的服务对象不同,Session对象是每位链接者自己所拥有的。每有1位链接者,系统会为它单独产生一个Session对象,每个对象都有自己的SessionID号,有多少个链接就有多少个对象,结束一个链接就中止一个Session对象;而Application对象是所有该网页链接者共用对象,它是当有第一个链接时产生,直至所有链接都断开或IIS/PWS服务器被关闭时终止,Application对象的数目永远等于1。

(3)由于以上区别,所以两者的适用范围不同。Application适合作Web网上的主页访问计数器、公共讨论区等;而Session对象则适合作单个用户的信息存储区,如做网上商店的“购物袋”。

3.5.5 Session与Cookie比较

我们可以使用Response对象建立Cookie文件,以记录访问者的信息。Session对象类似于Cookie对象,也可以用来记录浏览器的状态,所不同的是,Cookie是把信息记录在客户端的浏览器中,而Session对象则是把信息记录在IIS服务器中。