using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; using System.IO; namespace ZhengGong { public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { Application.Lock(); Application["dateTime"] = DateTime.Now.ToShortDateString(); Application["ipList"] = new List<string>(); //默認總訪問記錄數爲0 Application["count"] = 0; //默認當前在線數爲0 Application["online"] = 0; //將當前人數寫入文件中 WriteCountPerson(0); Application.UnLock(); } protected void Session_Start(object sender, EventArgs e) { //臨時日期和系統記錄的日期對比,若不相等表示不是同一天 string tempDate = DateTime.Now.ToShortDateString(); string appDate = Application["dateTime"].ToString(); if (!tempDate.Equals(appDate)) { Application["dateTime"] = tempDate; Application["ipList"] = null; int countNums = ReadCountPerson(); WriteCountPerson(countNums + int.Parse(Application["count"].ToString())); } //發起會話的客戶端IP地址 string tempIp = Context.Request.UserHostAddress; //設置一個會話的做用時間爲一分鐘,即一分鐘內不作任何操做的話,該會話就會失效。 Session.Timeout = 1; //用於存儲客戶端的IP地址集合,若沒有則表示是新的一天而且實例化出集合對象 List<string> ipList = Application["ipList"] as List<string>; if (ipList == null) { ipList = new List<string>(); //若是ipList集合爲空那麼實例化他 } //讀取出文件中保存的總訪問人數 int countNums_2 = ReadCountPerson(); if (!ipList.Contains(tempIp)) { //在ip集合中添加客戶端IP地址 ipList.Add(tempIp); Application["ipList"] = ipList; //總訪問數在文件中保存的數據累加1 countNums_2 += 1; WriteCountPerson(countNums_2); } //當前在線人數累加1 Application["online"] = (int)Application["online"] + 1; Application["count"] = countNums_2; Application.UnLock(); } protected void Application_BeginRequest(object sender, EventArgs e) { } protected void Application_AuthenticateRequest(object sender, EventArgs e) { } protected void Application_Error(object sender, EventArgs e) { } protected void Session_End(object sender, EventArgs e) { Application.Lock(); Session.Abandon(); //當以一個會話結束後,註銷該會話 int online = int.Parse(Application["online"].ToString()); if (online <= 0) { Application["online"] = 0; } else { Application["online"] = (int)Application["online"] - 1; } Application.UnLock(); } protected void Application_End(object sender, EventArgs e) { } /// <summary> /// 寫入網頁總訪問人數 /// </summary> /// <param name="nums"></param> public void WriteCountPerson(int nums) { string filePath = System.Web.HttpRuntime.AppDomainAppPath + "ConfigFiles\\countPersonNums.ini"; if (!File.Exists(filePath)) { File.Create(filePath); } StreamWriter sw = new StreamWriter(filePath, false); sw.WriteLine("訪問總數爲:" + nums); sw.Flush(); sw.Close(); } /// <summary> /// 讀取網頁總訪問人數 /// </summary> public int ReadCountPerson() { try { int nums = 0; string filePath = System.Web.HttpRuntime.AppDomainAppPath + "ConfigFiles\\countPersonNums.ini"; if (!File.Exists(filePath)) { return 0; } FileStream fs = new FileStream(filePath, FileMode.Open); StreamReader streamReader = new StreamReader(fs); string strLine = streamReader.ReadLine(); string[] split = strLine.Split(':'); if (split.Length <= 1) { return 0; } int.TryParse(split[1], out nums); fs.Flush(); fs.Close(); streamReader.Close(); streamReader.Dispose(); return nums; } catch (Exception ex) { throw ex; } } } }
直接貼出代碼,使用c# 的Global.asax 全局配置文件來作處理,效果測試過大體能夠可是有個小bug就是 關閉瀏覽器再打開瀏覽器那個sestion_start事件會再次執行,那麼當前在線人數會有誤,有待解決。c#