Frage

Was ist ein guter Weg, um einen Web-Seite Zähler zu implementieren?

Auf der Oberfläche dieses ein einfaches Problem, aber es wird problematisch, wenn mit Suchmaschinen-Crawler und Roboter, mehr Klicks von demselben Benutzer tun hat, aktualisieren Klicks.

Insbesondere was ist eine gute Möglichkeit, Links zu gewährleisten, nicht nur ‚geklickt up‘ durch den Benutzer durch wiederholtes Klicken auf? IP Adresse? Kekse? Beide haben einige Nachteile (IP-Adressen sind nicht unbedingt einzigartig, Cookies kann ausgeschaltet werden).

Auch was ist der beste Weg, um die Daten zu speichern? Erhöht einen Zähler einzeln oder speichern jeden Klick als Datensatz in einer Protokolltabelle, dann gelegentlich zusammenfassen.

Jede Live-Erfahrung wäre hilfreich,

+++ Rick ---

War es hilfreich?

Lösung 2

Also spielte ich um mit diesem ein wenig auf der Grundlage der Kommentare hier. Was ich kam mit einem Zähler in einem einfachen Feldzählen. In meiner app habe ich Code-Schnipsel Entitäten mit einer Ansicht Eigenschaft.

Wenn ein Ausschnitt betrachtet wird ein Verfahren (Whitelist) herausfiltert, was hoffentlich soll Browser sein:

public bool LogSnippetView(string snippetId, string ipAddress, string userAgent)
{
    if (string.IsNullOrEmpty(userAgent))
       return false;

    userAgent = userAgent.ToLower();

    if (!(userAgent.Contains("mozilla") || !userAgent.StartsWith("safari") ||
        !userAgent.StartsWith("blackberry") || !userAgent.StartsWith("t-mobile") ||
        !userAgent.StartsWith("htc") || !userAgent.StartsWith("opera")))
        return false;

    this.Context.LogSnippetClick(snippetId, IpAddress);
}

Die gespeicherte Prozedur dann eine separate Tabelle verwendet die neuesten Ansichten vorübergehend zu halten, die die Schnipsel Id speichern eingegebenen Datum und IP-Adresse. Jede Ansicht wird protokolliert und wenn eine neue Ansicht kommt in es überprüft, ob die gleiche IP-Adresse dieses Snippet innerhalb der letzten 2 Minuten zugegriffen hat. wenn ja nichts protokolliert.

Wenn es sich um eine neue Ansicht ist der Ansicht angemeldet ist (wieder SnippetId, IP, Eingetragen) und der tatsächlichen Ansichten Feld auf der Snippets Tabelle aktualisiert wird.

Wenn es die Tabelle nicht eine neue Ansicht ist mit allen angemeldeten Ansichten gereinigt, die als 4 Minuten älter sind. Dies in einer minmal Anzahl der Einträge im View-Log-Tabelle jederzeit zur Folge haben sollte.

Hier ist die gespeicherte Prozedur:

ALTER PROCEDURE [dbo].[LogSnippetClick]
    -- Add the parameters for the stored procedure here 
    @SnippetId AS VARCHAR(MAX),
    @IpAddress AS VARCHAR(MAX)          
   AS
   BEGIN

    SET NOCOUNT ON;

    -- check if don't allow updating if this ip address has already 
    -- clicked on this snippet in the last 2 minutes
    select Id from SnippetClicks 
        WHERE snippetId = @SnippetId AND ipaddress = @IpAddress AND 
              DATEDIFF(minute,  Entered, GETDATE() ) < 2      

     IF @@ROWCOUNT = 0  
     BEGIN              
        INSERT INTO SnippetClicks 
            (SnippetId,IpAddress,Entered) VALUES 
            (@SnippetId,@IpAddress,GETDATE())         
        UPDATE CodeSnippets SET VIEWS = VIEWS + 1 
            WHERE id = @SnippetId
     END
     ELSE
     BEGIN
        -- clean up
        DELETE FROM SnippetClicks WHERE DATEDIFF(minute,Entered,GETDATE()) > 4
     END
END

Das scheint ziemlich gut zu funktionieren. Wie andere schon erwähnten dies nicht perfekt, aber es sieht aus wie es in ersten Tests gut genug ist.

Andere Tipps

Die Nutzung von IP-Adressen in Verbindung mit Sessions. Zählen Sie jede neue Sitzung für eine IP-Adresse als einen Treffer gegen den Zähler. Sie können diese Daten in einer Protokolldatenbank speichern, wenn Sie denken, dass Sie jemals durch sie aussehen müssen. Dies kann für die Berechnung von Nutzen sein, wenn Ihre Website bekommt den meisten Traffic, wie viel Verkehr pro Tag, pro IP, etc.

Wenn Sie PHP bekommen, können Sie Sitzungen verwenden Aktivität von bestimmten Benutzern zu verfolgen. In Verbindung mit einer Datenbank, können Sie Aktivität von bestimmten IP-Adressen verfolgen, die Sie davon ausgehen, können die gleichen Benutzer sind.

Zeitstempel verwenden Treffer zu begrenzen (unter der Annahme von nicht mehr als 1 Treffer pro 5 Sekunden, zum Beispiel), und zu sagen, wann neue „Besucher“ auf die Website auftreten (wenn der letzte Treffer innerhalb von 10 Minuten vor ist, zum Beispiel).

Sie können $ _SERVER [] Eigenschaften, die Sie bei der Aufdeckung von Bots oder Besuchertrends (wie Browser-Nutzung) unterstützen.

edit: Ich habe vor Hits & Besuche verfolgt, eine Seitenansicht als Treffer gezählt, und +1 auf Besuche, wenn eine neue Sitzung erstellt wird. Es war recht zuverlässig (mehr als zuverlässig genug für die Zwecke verwendet ich es. Browser, die Cookies unterstützen nicht (und somit keine Unterstützung für Sitzungen) und Benutzer, die Sitzungen zu deaktivieren heutzutage ziemlich selten sind, so würde ich keine Sorgen über, es sei denn es Grund übermäßig genau zu sein ist.

Wenn ich Sie wäre, würde ich aufgeben, in erster Linie genau mein Zähler zu sein. Jede Lösung (zum Beispiel Cookies, IP-Adressen, etc.), wie Sie gesagt hat, neigt dazu, unzuverlässig zu sein. Also, ich denke, Ihre beste Wette Redundanz in dem System zu verwenden ist: verwenden Cookies, "Flash-Cookies auf der Startseite" (Shared Objects), IP-Adressen (vielleicht in Verbindung mit User-Agents) und Benutzer-IDs für Leute, die angemeldet sind.

Sie könnten eine Art Schema implementieren, wo jeder unbekannter Client eine eindeutige ID angegeben, die (hoffentlich) auf der Client-Rechner gespeichert werden und bei jeder Anfrage erneut gesendet. Dann könnten Sie eine IP-Adresse, Benutzer-Agenten binden und / oder Benutzer-ID (plus alles, was man sich denken kann) an jede eindeutige ID und umgekehrt. Der Zeitstempel und die eindeutige ID eines jeden Klick könnten irgendwo in einer Datenbanktabelle protokolliert werden, und jeder Klick lassen kann durch oder verweigert (zumindest, die jeweils auf Ihre Website klicken) sein, je nachdem, wie aktuell der letzte Klick für die gleiche eindeutige ID war. Dies ist wahrscheinlich zuverlässig genug für kurzfristigen Klick platzt, und langfristige, es würde nicht viel sowieso (für das Click-up Problem, nicht die Seitenzähler).

Friendly Roboter ihre User-Agent entsprechend eingestellt haben soll und kann gegen eine Liste der bekannten Roboter User-Agents überprüft werden (Ich fand eine hier nach einer einfachen Google-Suche), um richtig identifiziert und von echten Menschen mit separat behandelt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top