用application计数。
写在Global.asax里面,用到 Session_Start,Session_End,Application_Start,Application_End,以及lock。
-------------------------------------------------------------------
下面是我刚随手写的,用Global统计的,带有简单的防丢失数据功能。
性能不怎么样,可以说只能供小网站用用。
/// <summary>
/// 总人数,今日人数,在线人数
/// </summary>
static int totalCount, todayCount, onlineCount;
/// <summary>
/// 更新今日访问访问数的标志
/// </summary>
static DateTime lastCleanUp;
/// <summary>
/// 锁对象
/// </summary>
static object _obj = new object();
/// <summary>
/// 日志文件的路径
/// </summary>
string logFile = AppDomain.CurrentDomain.BaseDirectory + "visitLog.txt";
protected void Application_Start(object sender, EventArgs e)
{
//刚启动,为了防止服务器意外死机重启等因素,需要从记录文件中读取数目
if (System.IO.File.Exists(logFile))
{
string[] lines = System.IO.File.ReadAllLines(logFile);
if (lines.Length >= 3)
{
int.TryParse(lines[0], out totalCount);
int.TryParse(lines[1], out todayCount);
DateTime.TryParse(lines[2], out lastCleanUp);
}
}
onlineCount = 0;
}
protected void Session_Start(object sender, EventArgs e)
{
//锁定对象确定单线程访问
lock (_obj)
{
//如果日期变化了,将今日访问归零
if (DateTime.Now.Day != lastCleanUp.Day)
{
lastCleanUp = DateTime.Now;
todayCount = 0;
}
//计数
todayCount++;
totalCount++;
//为了防止服务器死机重启等意外因素丢失数据,我们每隔50个访客更新一下记录文件
//这个需要根据访问量调整
if (totalCount % 50 == 0)
{
string[] fns = new string[] { totalCount.ToString(), todayCount.ToString(), lastCleanUp.ToString() };
System.IO.File.Delete(logFile);
System.IO.File.WriteAllLines(logFile, fns);
}
//在线人数加1
onlineCount++;
}
}
protected void Session_End(object sender, EventArgs e)
{
//确保不冲突
lock (_obj)
{
//在线人数减1
onlineCount--;
}
}
protected void Application_End(object sender, EventArgs e)
{
//保存当前访问
string[] fns = new string[] { totalCount.ToString(), todayCount.ToString(), lastCleanUp.ToString() };
System.IO.File.Delete(logFile);
System.IO.File.WriteAllLines(logFile, fns);
}
网站今日访问,总访问及在线人数统计 asp.net
最新推荐文章于 2021-09-20 18:20:12 发布
本文介绍了一种使用ASP.NET Global事件进行网站访问统计的方法,包括总访问人数、今日访问人数及在线人数的统计,并实现了数据持久化以防数据丢失。
1万+

被折叠的 条评论
为什么被折叠?



