Feedback

C# - Simpler Hit Counter mit IP Sperre

Veröffentlicht von am 6/10/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!