myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Gemeinschaft » .NET-Komponenten und C#-Snippets » Asp.Net: Simpler Hit Counter mit IP Sperre
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Asp.Net: Simpler Hit Counter mit IP Sperre

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
b0b0nr1
myCSharp.de-Mitglied

Dabei seit: 12.05.2011
Beiträge: 91


b0b0nr1 ist offline

Asp.Net: Simpler Hit Counter mit IP Sperre

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Beschreibung:
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:

C#-Code:
using PageCounting;

In den Page Load:

C#-Code:
        PageCounter PCounter = new PageCounter();
        PCounter.CountThisPage();

Auslesen der aktuellen Hits:

C#-Code:
<%= new PageCounting.PageCounter().getCounts() %>

oder

C#-Code:
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".

C#-Code:
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;
        }
    }
}

Schlagwörter: Counter, Hit, Pagecounter, Ip Sperre, Asp.net

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von b0b0nr1 am 10.06.2011 18:53.

10.06.2011 17:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MarsStein MarsStein ist männlich
myCSharp.de-Poweruser/ Experte

avatar-3191.gif


Dabei seit: 27.06.2006
Beiträge: 3.149
Entwicklungsumgebung: VS 2013, MonoDevelop
Herkunft: Trier -> München


MarsStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ein paar Anmerkungen dazu:

1.
Du solltest darüber nachdenken, die gesperrten IPs nach einer bestimmten Zeit wieder freizugeben. Denn bei dynamischen IPs zählst Du sonst immer nur den ersten Aufruf, obwohl es sich einige Zeit später um einen völlig anderen Besucher handeln könnte, der mittlerweile diese IP erhalten hat.

Es ist durchaus üblich, jede IP-Adressen einmal am Tag zählen zu lassen - das würde aber bei Deinem Snippet wenn ich's richtig sehe einige Umbauarbeiten nach sich ziehen verwundert



2.

Zitat:
Um das zu umgehen erstellt einfach im ordner, wo die Page liegt den Ordner "counter".

Günstiger wäre IMHO, den Unterordner nach ~/App_Data zu legen. Da besteht auch normalerweise Schreibrecht um den Ordner automatisch anzulegen.

Gruß, MarsStein
10.06.2011 18:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
b0b0nr1
myCSharp.de-Mitglied

Dabei seit: 12.05.2011
Beiträge: 91

Themenstarter Thema begonnen von b0b0nr1

b0b0nr1 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

haste recht...kleiner denkfehler ABER....ändert sich nicht fast jede IP um 0uhr?
10.06.2011 18:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MarsStein MarsStein ist männlich
myCSharp.de-Poweruser/ Experte

avatar-3191.gif


Dabei seit: 27.06.2006
Beiträge: 3.149
Entwicklungsumgebung: VS 2013, MonoDevelop
Herkunft: Trier -> München


MarsStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat:
ändert sich nicht fast jede IP um 0uhr?

Bei festen IPs (wie in vielen Firmen) ändert sie sich gar nicht. Der Zeitpunkt wann sich IPs ändern ist völlig unterschiedlich. Aber es werden immer wieder die gleichen IPs an andere Nutzer verteilt.

Gruß, MarsStein
10.06.2011 18:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
b0b0nr1
myCSharp.de-Mitglied

Dabei seit: 12.05.2011
Beiträge: 91

Themenstarter Thema begonnen von b0b0nr1

b0b0nr1 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Geändert (änder ich oben auch nochmal):

C#-Code:
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;
        }
    }
}
10.06.2011 18:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 8 Jahre.
Der letzte Beitrag ist älter als 8 Jahre.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 27.05.2020 08:35