Sub Session_OnStart
End Sub
Sub Session_OnEnd
if session.contents(\判断是否为登录用户的Session_OnEnd
application(\(*.mdb)};dbq=\
application.lock
application(\
application(\where id=\
application.unlock
application(\
end if
End Sub
</script>
==============
至此,完整的代码已经完成了。因为在Application和Session的OnEnd事件里不能使用Server对象,所以要将数据库的连接及数据库在服务器上的物理地址(d:\\inetpub\\wwwroot\\bbs.mdb)存储在application变量中,并在Application_OnStart事件中预先处理。同理,在Session_OnEnd事件中不能用session(\来代替session.contents(\(以下有详尽说明)。
四、本文实例中值得引起注意的两点
⒈OnEnd事件里的session.contents
刚开始接触global.asa的朋友经常会将上面Session_OnEnd事件里的
if session.contents(\写成
if session(\,
这样的话系统不会提示错误,但是永远也不会执行then后面的内容,这是因为在OnEnd事件里禁止使用Session对象,但是可以用Session对象的集合来调用session变量。因为IIS并没提示任何错误信息,所以笔者曾经在这上面浪费了很多时间。在此希望大家引以为鉴!
⒉Application_OnStart事件里用Server.MapPath获取数据库的物理地址时应使用绝对地址为了说明这个问题,大家可以做个实验:将上面Application_OnStart事件里的
application(\改为:
application(\
然后在d:\\inetpub\\wwwroot\\目录下建立一个test子目录,写一个temp.asp在test目录里。
====test.asp====
<%response.write application(\%>
================
再将temp.asp拷贝一份放在根目录下(d:\\inetpub\\wwwroot\\)。用记事本打开global.asa,再打开两个浏览器,浏览器A输入地址
http://localhost/temp.asp,按回车,将在浏览器上输出:
d:\\inetpub\\wwwroot\\bbs.mdb
然后,在记事本的窗口上点\文件\菜单,选\保存\(使global.asa的修改时间改变,从而使IIS重启动所有服务),再在浏览器B输入地址
http://localhost/test/temp.asp,按回车,在浏览器上输出的是:
d:\\inetpub\\wwwroot\\test\\bbs.mdb
global.asa文件虽然是放在站点根目录下,但是如果在server.mappath中使用的是相对地址,而触发Application_OnStart事件的用户第一次访问的页面又不是属于根目录的话,得到数据库的物理地址将不会是期望的结果,希望大家要特别小心。