web应用程序设计:ASP.NET/PHP/JSP技术教程
上QQ阅读APP看书,第一时间看更新

3.6 Global.asa文件初始化应用程序

Global. asa文件是一个非常重要的文件,一旦创建了一个应用程序,在工程项目的下面就会自动生成Global.asa文件。程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象。该文件的内容不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象。在这个文件中含有Application对象和Session对象的事件处理过程。下面是一个空白的Global.asa文件结构。

除了以上示例中的4个事件外,还可以在Global.asa中加入声明创建对象的语句。

需要注意的是Global.asa使用了微软的HTML拓展<Script>标记语法来限制脚本,这也就是说,必须使用<Script>标记来引用这两个事件而不能用“<%”和“%>”符号引用。上述示例中Global.asa使用的是VBScript,也可以使用其他脚本语言。

在Global.asa中不能有任何输出语句,无论是HTML的语法还是Response.Write()方法都是不行的,Global.asa在任何情况下都不会显示。对于事件,一个Global.asa文件被分成了4个部分,下面分别来讨论。

3.6.1 Session_OnStart事件

前面已经知道Session对象是个单用户级的变量,它用于保存一个用户的信息。如果在某一个时间段内有100个用户访问网站,那么Session_OnStart事件将被触发100次,然后执行里面的代码,并且这些代码的执行是在网页显示之前进行,也就是说当服务器开始发送数据时,这个事件就发生了。如果只有这100个用户一直在网站冲浪,那么将不会有新的Session_OnStart事件产生。

只要在Global.asa中添加一些希望执行的脚本,一旦Session创建,这些脚本就会自动执行,如下例:

这个脚本将Bill和password值赋给了UID和PWD变量。该例子将在任何一个Ses-sion创建的时候就被执行。

再看一个利用Session Onstart的例子。例如,希望访问者必须浏览某一个主页,而无论在浏览器上输入什么地址:

在这个脚本中,用户就被自动引导到该主页。

3.6.2 Session_OnEnd事件

任何一个用户如果在20分钟之内没有请求任何页面,那么他的Session-Onend事件将会产生,这时Session对象将会自动结束。在这个事件中的程序代码将在用户离开站点时执行,但不会影响到其他用户。可以采用清除命令来消除Session或利用代码将Ses-sion中的数据写入数据库,或写入记事本中。

下面的例子Session_OnStart事件和Session_OnEnd事件都被使用。

这个例子中,当用户的Session开始时,日志文件中记录了该用户的SessionID和时间信息;当用户的Session结束时,日志文件就记录了该用户的Session结束的信息。这样,就可以作多种判断统计,例如:每个人的停留时间、网站上现在有多少人等。

3.6.3 Application_OnStart事件

Application_OnStart事件在首次创建新的会话(即Session_OnStart事件)之前发生。也就是说,假如有很多的用户访问某站点,但只有第一个用户请求这个应用程序时才会发生。只有Application和Server内建对象是可用的。在Application_OnStart事件脚本中引用Session、Request或Response对象将导致错误。

3.6.4 Application_OnEnd事件

Application_OnEnd事件在应用程序退出时于Session_OnEnd事件之后发生,只有Application和Server内建对象可用。