C# 統計在線人數和總訪問人數

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#

相關文章
相關標籤/搜索