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>
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>
相关文章推荐
- Asp.Net在线统计用户列表
- ASP.NET中在线用户统计的简单实现及讨论
- ASP.NET中在线用户统计
- ASP.NET中在线用户统计
- ASP.NET中在线用户统计(C#)
- ASP.NET中在线用户统计的一点细节
- ASP.NET中在线用户统计的一点细节
- xmlhttp ASP.NET在线用户列表 关闭浏览器 精确统计 单人登陆
- ASP.NET中在线用户统计
- ASP.NET中在线用户统计
- ASP.NET中在线用户统计
- ASP.NET中在线用户统计
- 用ASP.NET实现在线用户统计
- ASP.NET中在线用户统计
- xmlhttp ASP.NET在线用户列表 关闭浏览器 精确统计 单人登陆
- 用ASP.NET实现在线用户统计
- asp.net 在线用户列表统计
- ASP.NET中在线用户统计
- ASP.NET中在线用户统计
- ASP.NET MVC使用SignalR统计在线用户人数