您现在的位置: 网页制作教程网 >> 网络编程 >> Asp教程 >> ASP基础教程 >> 正文

深入研究Application和Session对象

作者:网易学院

来源:网易学院

热度:

2008-2-15 13:21:08



  这只是一个统计在线人数的简单例子,对于一个完整的虚拟社区来说,仅仅统计有多少人在线是不够的,在本例中数据库里有个online字段是用来记录用户的在线状态,用户登录的时候,在login.asp里将 online设为1,但用户离线时并没有将online设为0,要完善它,就要修改一下Session_OnEnd事件,在该事件里将online设为 0。
===global.sas===

  <script LANGUAGE="VBScript" RUNAT="Server">

  Sub Application_OnStart

   application("online")=0

   set application("conn")=Server.CreateObject("ADODB.Connection")

   application("db")=Server.MapPath("\bbs.mdb") '此处最好使用绝对路径\bbs.mdb,下文有详细介绍

  End Sub

  sub Application_OnEnd

   set application("conn")=nothing

  End Sub

   Sub Session_OnStart

  End Sub

  Sub Session_OnEnd

   if session.contents("pass") then '判断是否为登录用户的Session_OnEnd

     application("con").open ="driver={Microsoft Access Driver (*.mdb)};dbq="&application("db")

      application.lock

      application("online")=application("online")-1

      application("con").Execute ("update friends set online=0 where id="&session.contents("id"))

      application.unlock

      application("con").close

   end if

  End Sub

  </script>

  ==============
至此,完整的代码已经完成了。因为在Application和Session的OnEnd事件里不能使用Server对象,所以要将数据库的连接及数据库在服务器上的物理地址(d:\inetpub\wwwroot\bbs.mdb)存储在application变量中,并在 Application_OnStart事件中预先处理。同理,在Session_OnEnd事件中不能用session("pass")来代替 session.contents("pass")(以下有详尽说明)。

  四、本文实例中值得引起注意的两点

  ⒈OnEnd事件里的session.contents

  刚开始接触global.asa的朋友经常会将上面Session_OnEnd事件里的
if session.contents("pass") then 写成

if session("pass") then,
这样的话系统不会提示错误,但是永远也不会执行then后面的内容,这是因为在OnEnd事件里禁止使用Session对象,但是可以用Session对象的集合来调用session变量。因为IIS并没提示任何错误信息,所以笔者曾经在这上面浪费了很多时间。在此希望大家引以为鉴!

  ⒉Application_OnStart事件里用Server.MapPath获取数据库的物理地址时应使用绝对地址为了说明这个问题,大家可以做个实验:将上面Application_OnStart事件里的application("db")=Server.MapPath("\bbs.mdb")改为:

  application("db")=Server.MapPath("bbs.mdb")

然后在d:\inetpub\wwwroot\目录下建立一个test子目录,写一个temp.asp在test目录里。

  ====test.asp====

  <%response.write application("db")%>

  ================

再将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事件的用户第一次访问的页面又不是属于根目录的话,得到数据库的物理地址将不会是期望的结果,希望大家要特别小心。

asp基础系列教程

上一页  [1] [2] [3] [4] 


我来说两句:

1分 2分 3分 4分 5分
姓名: *


* 请各位网友遵纪守法并注意语言文明。
网站简介 | 联系方式 | 意见建议 | 版权说明
Copyright © 2007 All rights reserved
滇ICP备06006992号