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

来源:互联网 发布:无缝分类信息群发软件 编辑:程序博客网 时间:2024/05/14 03:45
用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);}
原创粉丝点击