Frage

Ich sah bereits der beliebtestene Django hit counter Lösungen und keiner von ihnen scheint das Problem des Spam die Refresh-Button zu lösen.

Muss ich wirklich die IP log jeder Besucher , damit sie nicht künstlich durch Seitenaufruf zählt Steigerung Spamming den Refresh-Button (oder eine schnelle und schmutzige Skript schreiben zu tun es für sie)?

Weitere Informationen

So jetzt Sie die Ansicht zählt mit den folgenden wenigen Zeilen Python-Code aufblasen können. Das ist so wenig, dass Sie nicht wirklich brauchen, um ein Skript zu schreiben, die Sie gerade es in einer interaktiven Sitzung geben könnte:

from urllib import urlopen

num_of_times_to_hit_page = 100
url_of_the_page = "http://example.com"

for x in range(num_of_times_to_hit_page):
    urlopen(url_of_the_page)

Lösung werde ich wahrscheinlich verwenden

Für mich ist es eine ziemlich grobe Situation, wenn Sie eine Reihe von Schreiben in die Datenbank auf jedem Seitenaufruf zu tun, aber ich denke, es kann nicht geholfen werden. Ich werde IP-Protokollierung durch mehrere Benutzer künstlich ihre Ansicht Zählung Aufblasen implementieren. Es ist nicht, dass sie schlechte Menschen oder sogar schlechte Benutzer sind.

Sehen Sie die Antwort über das Problem mit Caching-Lösung ... Ich werde diesen Weg zuerst verfolgen. Update wird mit den Ergebnissen.

Für das, was es wert ist, wie es scheint Stack-Überlauf wird mit Hilfe von Cookies (Ich kann nicht meine eigene Meinung Zahl erhöhen, aber es erhöht wird, wenn ich die Seite in einem anderen Browser besucht.)

Ich denke, dass der Nutzen ist einfach zu viel, und diese Art von ‚Betrug‘ ist jetzt einfach zu leicht.

Danke für die Hilfe jeder!

War es hilfreich?

Lösung

Logging eine IP ist wahrscheinlich die sicherste. Es ist nicht perfekt, aber es ist besser als Cookies und weniger störend für die Nutzer als eine Registrierung erforderlich ist. Das hieß, würde ich empfehlen, nicht mit dem Speichern dieser in einer DB störe. Verwenden Sie stattdessen Djangos . Der Schlüssel wäre die ip und der Wert eine einfache boolean. Selbst eine dateibasierte Cache sollte ziemlich schnell sein, obwohl geht mit Memcached als Cache-Backend, wenn Sie wirklich stark befahrenen erwarten.

So etwas sollte funktionieren:

ip = request.META['REMOTE_ADDR']
has_voted = cache.get(ip)
if not has_voted:
    cache.set(ip, True)
    #code to save vote goes here

Andere Tipps

Es gibt keine absolut sichere Methode, um jemanden daran zu hindern, künstlich eine Zählung aufgeblasen wird. Vielmehr ist es das Ausmaß, in dem Sie bereit sind, Zeit zu verbringen, so dass es schwieriger für sie, dies zu tun:

  • gar nicht (sie klicken Refresh-Button)
  • ein Cookie, überprüfen Cookie zu sehen, ob sie schon da waren (sie klar Cookies)
  • Melden Sie sich IP-Adressen (die gefälschte eine andere IP jedes Mal)
  • Erfordern signin mit einer E-Mail aus sie reagieren (sie für mehrere E-Mail-Konten anmelden)

Also, am Ende, Sie müssen nur den Aufwand holen Sie, um gehen möchten zu verhindern, dass Benutzer das System zu missbrauchen.

Sie könnten ihnen ein Cookie senden, wenn sie darauf zugreifen und dann für das Cookie überprüfen. Es kann immer noch gamed werden, aber es ist ein bisschen schwieriger.

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