Feedback

C# - Simpler Hit Counter mit IP Sperre

Veröffentlicht von am 10.06.2011
(0 Bewertungen)
Dieser Snippet führt nebenbei auch File Statistiken. Ihr könnt also sehen wieviele User auf welcher Seite waren indem ihr folgende Datei aufruft:

~/counter/[aspxfilename].txt

Beispiel zur deklaration:

Importieren:
using PageCounting;


In den Page Load:

PageCounter PCounter = new PageCounter();
PCounter.CountThisPage();



Auslesen der aktuellen Hits:

<%= new PageCounting.PageCounter().getCounts() %>


oder
int akutelleHits = new PageCounting.PageCounter().getCounts();


Manche Server haben Probleme damit Ordner erstellen zu lassen, wie meiner (Sharinghoster).

Um das zu umgehen erstellt einfach im ordner, wo die Page liegt den Ordner "counter".
//Filename Pagecounter.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;


namespace PageCounting
{

    /// <summary>
    /// Zusammenfassungsbeschreibung für PageCounter
    /// </summary>
    public class PageCounter
    {
        public PageCounter()
        {
           
        }

        public void CountThisPage()
        {
            //
            // Dateicheck 
            // Class File braucht Schreib und Änderrechte
            //
            string dir = HttpContext.Current.Server.MapPath("~/App_Code/counter");
            string file = HttpContext.Current.Server.MapPath("~/App_Code/counter/counter.txt");
            string file2 = HttpContext.Current.Server.MapPath("~/App_Code/counter/ips.txt");

            //Wir führen außerdem eine Statistik über alle Dateien. Wann welche Aspx Datei besucht wurde
            string FileNameForAspx = Path.GetFileNameWithoutExtension(HttpContext.Current.Request.Path);
            string RawFile = HttpContext.Current.Server.MapPath("~/App_Code/counter/" + FileNameForAspx + ".txt");


            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);

            }
            if (!File.Exists(file))
            {

                File.Create(file);

            }
            if (!File.Exists(file2))
            {

                File.Create(file2);

            }
            if (!File.Exists(RawFile))
            {

                File.Create(RawFile);

            }

            FileInfo FI = new FileInfo(file2);

            if (FI.LastWriteTime.Day != DateTime.Now.Day) {

                File.WriteAllText(file2, "");
            
            }
            string TotalCounter = HttpContext.Current.Server.MapPath("~/App_Code/counter/counter.txt");
            string FileCounter = HttpContext.Current.Server.MapPath("~/App_Code/counter/" + FileNameForAspx + ".txt");
            string myIp = HttpContext.Current.Request.UserHostAddress.ToString();

            if (!IP_Exists())
            {

                string content_total = File.ReadAllText(TotalCounter);
              

                File.WriteAllText(TotalCounter, content_total + "" + myIp + ";");
                File.WriteAllText(file2, content_total + "" + myIp + ";");
                string content_raw = File.ReadAllText(FileCounter);
                File.WriteAllText(FileNameForAspx, content_raw + "" + myIp + ";");


            }
        
        }

        private bool IP_Exists()
        {

            bool ret = false;

            string[] ips = File.ReadAllText(HttpContext.Current.Server.MapPath("~/App_Code/counter/ips.txt")).Split(';');
            string myIp = HttpContext.Current.Request.UserHostAddress.ToString();

            for (int x = 0; x < ips.Length; x++)
            {

                if (myIp == ips[x]) ret = true;

            }

            return ret;
        }

        public int getCounts()
        {
            int ret = 0;
            try
            {
                ret = File.ReadAllText(HttpContext.Current.Server.MapPath("~/App_Code/counter/counter.txt")).Split(';').Length - 1;
            }
            catch
            {

                //wenn ein undeutiger Wert rauskommt (Oben) gebe 0 aus. Da dies jedoch schon der Default Wert ist brauchen wir im Catch keinen Code

            }



            return ret;
        }
    }
}
Abgelegt unter Hitcounter, Pagecounter, Hit, Counter, Aspx, Ip Sperre.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!