• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 作文范文 > 正文

    [基于.NET内置对象的在线人数统计]ADO.NET有哪几个对象

    时间:2019-01-02 03:30:56 来源:雅意学习网 本文已影响 雅意学习网手机站

      摘 要: ASP.NET具有七大内置对象, 用ASP. NET编写虚拟社区、网上购物等B/S程序时,Application和Session对象具有举足轻重的作用,能够灵活合理地运用这两个对象是提高程序质量的关键。
      关键词: .NET 内置对象 在线人数统计
      
      一、关键对象分析
      
      我们可以把Application看成一个用于存储全局变量的容器,实际它只是一个对象,而ASP.NET应用程序里面的变量,也就是容器里面的内容。ASP.NET应用程序是单个Web服务器上某一个虚拟目录及其子目录范围内所有文件、页、处理程序、模块、代码的总和。可以在整个应用程序范围之内存储一些信息,我们可以用变量来存储。但需要注意的是,变量的整个生命周期受限制于网页,即每一次ASP.NET文件被执行完毕(Web服务器端发送代码到客户端后),变量的内容便被释放。很多时候,我们又需要保留这个内容,比如论坛系统,每次刷新后,页面的内容仍然要存在,这就需要Application来存储。利用Application对象存储的变量及对象在整个应用程序内执行的所有ASP.NET页面都是可用的。Application中存储的是全局变量,这些变量占用了系统较多的内存资源,在这个变量没有被替代之前,所占用的资源是不会被释放的。
      Session对象和Application有很大不同。Application对象存储信息是整个应用程序所共享的全局信息,每一个客户都能够访问到的相同信息,针对整个应用程序,并且整个程序里的每一个用户。Session对象的作用是在服务器端存储特定局部的的信息,是针对特定的一个用户,Session中的信息也叫做会话状态。我们用一个例子来说明Session的使用。比如设计一个论坛。我们进入论坛,提交用户名和密码后,发帖子、留言等都不需要再用用户名和密码了,这是因为已经保留了注册信息。我们登陆成功后,该系统已经把用户名和密码等存放进了Session对象,然后把信息返回到服务器,当转到下一个页面时,再从服务器取出信息来使用。我们留言或者发帖子的时候,就从 Web服务器的Session中取出用户名和密码来判断我们是否有权利这么做。
      ASP.NET的Application和Session对象,体现了其他ASP.NET内置对象所没有的特征,即事件。每一个用户访问服务器时都会触发一个OnStart事件,每个访客的会话结束时都会触发一个OnEnd事件。OnStart和OnEnd这两个事件一般应用于虚拟社区中统计在线人数、修改用户的在线离线状态等。要具体定义这两个事件,需要将代码写在Global.asa文件,并将该文件放在站点的根目录下(缺省是\Inetpub\wwwroot\)。另外,Application和Session对象规定了在OnEnd事件里除了Application对象外其他ASP内置对象(Response、Request、Server、Session……)一概不能使用。以下举一个虚拟社区统计在线人数的例子来说明如何使用这两个事件。
      
      二、具体实现方法
      
      在本例中,用application["online"]变量记录已经登录社区的在线人数,因为一旦有用户访问服务器而不论用户是否登录,都会产生OnStart事件,所以不能在OnStart事件里使Application["online"]加一。因为不论是否是登录用户的会话结束都会产生OnEnd事件(假如有访客访问了服务器但并不登录社区,他的会话结束后也会产生OnEnd事件),所以在Session_OnEnd事件里用了if语句来判断是否为已登录用户的OnEnd事件,如果是才将在线人数减一。
      1.Global文件部分代码
      void Application_Start(object sender, EventArgse)
      {
      Application["total"] = 0;//总人数
      Application["online"] = 0;//在线人数
      //在应用程序启动时运行的代码
      }
      void Session_Start(object sender, EventArgse)
      {
      Session.Timeout = 1;
      Application.Lock();//防止并发
      Application["total"]=(int)Application["total"]+1;
      Application["online"]=(int)Application["online"]+1;
      Application.UnLock();
      }
      void Session_End(object sender, EventArgse)
      {
      Session.Timeout = 1;
      Application.Lock();
      Application["online"] = (int)Application["online"] -1;
      Application.UnLock();
      }
      2.CS文件部分代码
      protected void Page_Load(object sender, EventArgse)
      {
      this.l2.Text = Application["online"].ToString();
      this.l4.Text = Application["total"].ToString();
      }
      至此,关键的代码已经完成了。在Application和Session的OnEnd事件里不能使用Server对象,所以要将数据库的连接及数据库在服务器上的物理地址(d:\inetpub\wwwroot\bbs.mdb)存储在application变量中,并在Application_OnStart事件中预先处理。同理,在Session_OnEnd事件中不能用session["pass"]来代替session.contents["pass"]。
      这只是一个统计在线人数的简单例子,对于一个完整的虚拟社区来说,仅仅统计有多少人在线是不够的,在本例中数据库里有个online字段是用来记录用户的在线状态,用户登录的时候,在login.asp里将online设为1,但用户离线时并没有将online设为0,要完善它,就要修改一下Session_OnEnd事件,在该事件里将online设为0。

    推荐访问:在线 对象 人数 统计

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章