If tomorrow never comes

The meaning of life is creation,which is independent an boundless.

导航

ASP.NET 在线用户统计

Posted on 2009-02-21 15:11  Brucegao  阅读(999)  评论(0编辑  收藏  举报

一、显示页面代码

1public partial class _Default : System.Web.UI.Page 
2{
3    protected void Page_Load(object sender, EventArgs e)
4    {
5        vistors.Text = "本站当前有:<b>" + Application["user_sessions"].ToString() + "" + "</b> 位访问者!";
6
7    }

8}

 

二、Global.asax页面代码实现

Global.asax

 

三、讨论

     以上我们是通过session来统计在线的用户数量,如果用户没有关闭浏览器而去浏览另外的页面,那么就会给我们的统计带来误差,所以在session有效期上我们可以通过Timeout来设置,一般是设置为20分钟。

     另外,ASP中如果浏览器中的Cookie设置为“禁用”, 这样我们的session就无法传递了,这也就导致了无法统计,不过在ASP.NET我们知道了解决办法,我们可以在web.config中设置 <sessionState cookieless="false"></sessionState>中的false设置为true就可以了,就是不使用Cookie也可以传递session,这就可以确保我们的程序在不同的环境中也能顺利进行。

四、注意事项

 这里需要注意的是 Session_End 事件,只有 InProc 模式支持该事件,也就是说,只有将会话数据存储在 ASP.NET 辅助进程中时才支持该事件。它标志着会话的结束,并用于执行终止该会话所需的所有清除代码。对于要引发的 Session_End 事件来说,必须首先存在会话状态,这意味着必须在该会话状态中存储一些数据,并且必须至少完成一个请求。如果会话状态属性 Mode 为 StateServer 或 SQLServer,则忽略 Global.asax 文件中的 Session_End 事件。如果会话状态属性 Mode 设置为 Custom,则由自定义会话状态存储提供程序决定是否支持 Session_End 事件。
     会话状态的配置是通过设置Web.config文件的<sessionState>节来实现的。下面介绍一下进程内模式的配置方法,它也是默 认的会话状态模式。若要使用进程内模式,请将 <sessionState> 元素的 mode 属性设置为 Inproc。
下面显示了进程内模式的一个配置设置示例。
<configuration>
    <system.web>
        <sessionState mode="Inproc"
                      cookieless="false"
                      timeout="20"/>
        </sessionState>
    </system.web>
</configuration>