您的位置:首页 > 编程语言 > ASP

ASP.NET 在线用户统计

2009-02-21 15:11 344 查看
一、显示页面代码

public partial class _Default : System.Web.UI.Page

{

Global.asax

1 <%@ Application Language="C#" %>

2

3 <script runat="server">

4

5 void Application_Start(object sender, EventArgs e)

6 {

7 // Code that runs on application startup

8 Application["user_sessions"] = 0;

9

}

void Application_End(object sender, EventArgs e)

{

// Code that runs on application shutdown

}

void Application_Error(object sender, EventArgs e)

{

// Code that runs when an unhandled error occurs

}

void Session_Start(object sender, EventArgs e)

{

// Code that runs when a new session is started

Application.Lock();

Application["user_sessions"] = (int)Application["user_sessions"] + 1;

Application.UnLock();

}

void Session_End(object sender, EventArgs e)

{

Application.Lock();

Application["user_sessions"] = (int)Application["user_sessions"] - 1;

Application.UnLock();

// Code that runs when a session ends.

// Note: The Session_End event is raised only when the sessionstate mode

// is set to InProc in the Web.config file. If session mode is set to StateServer

// or SQLServer, the event is not raised.

}

</script>

三、讨论

以上我们是通过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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: