网站今日访问,总访问及在线人数统计 asp.net

用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);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值