使用asax 网站加个今日访问,总访问人数、在线人数

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

 


<script runat="server">
    //用于记录 总人数,今日人数,在线人数
    /// <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);
    }
      
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值