用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
最新推荐文章于 2015-04-27 15:56:00 发布