当前位置:编程学习 > C#/ASP.NET >>

如何过得在线的人数啊?

我是个初学者

请问大家,如何在ASP.NET 中获得在线的人数?

拜托大家了。。谢谢 --------------------编程问答-------------------- 1、首先,配置web.config
将Session的状态配置成如下,为什么我就不说了。

<sessionState mode="InProc"></sessionState>
2、Global.asax的各个方法
<%@ Application Language="C#" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
        Application.Add("OAS_Line_Counts", 0);
    }
   
    void Application_End(object sender, EventArgs e)
    {
        //  在应用程序关闭时运行的代码
        Application.RemoveAll();
    }
           
    void Application_Error(object sender, EventArgs e)
    {
        // 在出现未处理的错误时运行的代码
       
    }

    void Session_Start(object sender, EventArgs e)
    {
        // 在新会话启动时运行的代码
        Session.Timeout = 30;
    }
       
    void Session_End(object sender, EventArgs e)
    {
        // 在会话结束时运行的代码。
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
        // 或 SQLServer,则不会引发该事件。
     Application.Lock(); 
            if (Application["OAS_Line_Counts"] != null)
            {
                Application["OAS_Line_Counts"] = Int32.Parse(Application["OAS_Line_Counts"].ToString()) - 1;
                if (Int32.Parse(Application["OAS_Line_Counts"].ToString()) < 0)
                    Application["OAS_Line_Counts"] = 0;
               
            }
    Application.UnLock();   
    }
      
</script>
3、登陆成功后的人数加一
  Application.Lock();
                                if (Application["OAS_Line_Counts"] != null)
                                {
                                    Application["OAS_Line_Counts"] = Int32.Parse(Application["OAS_Line_Counts"].ToString()) + 1;
                                }
                                else
                                {
                                    Application["OAS_Line_Counts"] = 1;
                                }
                            Application.UnLock();4、退出时减一
 Session.RemoveAll();     
 Session.Abandon();//取消会话状态就会触发Session_End的事件5、当关闭窗口时的统计(关键的地方)
如果页面是用框架结构做的,则里面不能用.net的控件,而且没有body,因此,我们只能调用其他的页面来实现。
我的方法如下:
<script language="javascript" type="text/javascript">
function PageClose()
{
         //这样写,主要是防止刷新也触发该事件
     if(event.clientX>document.body.clientWidth-30 && event.clientY<0 || event.altKey) //event.altKey表示按下了Alt按纽
        {            
        //alert("X:"+event.clientX+"  Y:"+event.clientY+"  "+document.body.clientWidth);
           window.location .href="PageCloseCount.aspx";
           widnow.close();
        }

}
</script>
</head>
<frameset onbeforeunload="PageClose()" rows="88,*" cols="*" framespacing="0" frameborder="no" border="0" bordercolor="#0099FF">
  <frame src="top.aspx" name="topFrame" scrolling="NO" noresize>
  <frameset rows="*" cols="148,*" framespacing="0" frameborder="no" border="0" bordercolor="#33CCFF">
    <frame src="left.aspx" name="leftFrame" scrolling="yes" noresize>
    <frame src="desktop.aspx" name="mainFrame" scrolling="yes">
  </frameset>
</frameset>
<noframes><body>
</body></noframes>PageCloseCount里调用的方法
 public void PageClose()
    {
System.Web.HttpContext.Current.Session.RemoveAll();     
  System.Web.HttpContext.Current.Session.Abandon();
   }
  
如果不是用框架做的就要简单些了,可以不需要调用其他的页面来执行方法,用他自己就可以了。
部分代码:
     <script language="javascript" type="text/javascript">
function PageClose()
{
     if(event.clientX>document.body.clientWidth -30 && event.clientY<0 || event.altKey) //event.altKey表示按下了Alt按纽
        { 
           document.all('ButtonPageClose').click();
           document.all('ButtonPageClose').focus();
        }
}
</script> 
</head>
<body  onbeforeunload="PageClose()">
按纽里的方法同上面一样,也是取消会话。
--------------------编程问答-------------------- Load()事件中就行了啊 
Application["Count"] = Int32.Parse(Application["Count"])+1
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,