我想知道我网站上的在线访客数量.我做了我的研究,发现了两个解决方案.
它易于设置且易于使用,但它也增加了每个Ajax请求/响应的用户数.仅我的主页有12个Ajax请求(对一个页面的8个请求和对另一个页面的4个请求).这大大增加了用户数量.
来源:Stack Overflow Q/A
计算访客数量
这个与前一个完全相同.
来源:ASP.Net论坛 如何使用C#查看"谁在线"
这个看起来比前两个好.以下是此解决方案的详细代码.
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
HttpContext.Current.Application["visitors_online"] = 0;
}
void Session_Start(object sender, EventArgs e)
{
Session.Timeout = 20; //'20 minute timeout
HttpContext.Current.Application.Lock();
Application["visitors_online"] = Convert.ToInt64(HttpContext.Current.Application["visitors_online"]) + 1;
HttpContext.Current.Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
HttpContext.Current.Application.Lock();
Application["visitors_online"] = Convert.ToInt64(HttpContext.Current.Application["visitors_online"]) - 1;
HttpContext.Current.Application.UnLock();
}
Run Code Online (Sandbox Code Playgroud)
它似乎能够忽略每个Ajax响应的计数增加,但它仍然会增加每个页面刷新或页面请求.
有没有办法计算ASP.Net中准确的在线访问者数量?
您永远无法获得完全准确的数字:无法(可靠地)检测到用户"已导航到另一个站点"(并离开您的站点)或该用户"关闭了浏览器".
Session_Start/Session_End方式的问题是Session_End仅针对"InProc"会话调用,而不是会话存储在StateServer或SqlServer中.
你可以做什么:
Dictionary<string, DateTime>应用程序范围.此存储的session-id(字符串键)与最新访问时间(DateTime值)一个问题(至少):如果一个用户同时使用两个浏览器,他会打开两个会话并计为两倍.如果用户总是登录,也许您可以依靠login-id而不是session-id.
| 归档时间: |
|
| 查看次数: |
13927 次 |
| 最近记录: |