Patrick: Counter mit reloadsperre (aber nur für begrenzte zeit)

Hallo,

ich habe mir einen Counter programmiert mit einer reloadsperre. das prob ist wenn ein user einmal drauf war wird er erst wieder gezählt wenn ein anderer drauf war. wie kann ich es machen das die sperre nach einer zeit aufgehoben wird für den user?

mein script sieht mommentan so aus:

<?php
include("../db.inc.php");

$anzahl_hits = $datensatz[num_visits];
$last_ip = $datensatz[last_ip];

$remote = $REMOTE_ADDR;

if ($remote == $last_ip) {
 //Hit wird nicht gezaehlt
} else {
 $new_hit = $anzahl_hits + 1;

mysql_connect("localhost", "$benutzer", "$passwort");
 mysql_select_db("$db");
 $sql = "UPDATE sd_models set last_ip = "$remote",num_visits = "$new_hit" WHERE user = '$user'";
 $result = mysql_query($sql);
 mysql_close();
  }

//Hits anzeigen
 echo "<b>SedCard aufrufe: $datensatz[num_visits]</b>";
?>

mfg,
Patrick

  1. Hallo

    Du speicherst noch dir Uhrzeit (zB in Form eines Timestamps) mit. Dann überprüfst du vor dem Zählen die verstrichene Zeit. Ist es genug, so zähle erneut, ansonsten halt nicht.
    Aber die Diskussion "Ist ein Counter sinnvoll" hatten wir wohl schon zu genüge :)

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
  2. Das einfachste ist, du platzierst ein Cookie mit spezifischer Lebensdauer, z.B. 15min. Ist das Cookie bereits vorhanden, lässt du den Zähler nicht klingeln - ist keins vorhanden wird der Aufrufer als neuer Besucher gewertet und du lässt den Counter rasseln.
    Grüße...

  3. Hallo Patrick,

    ich habe mir einen Counter programmiert mit einer reloadsperre. das prob ist wenn ein user einmal drauf war wird er erst wieder gezählt wenn ein anderer drauf war. wie kann ich es machen das die sperre nach einer zeit aufgehoben wird für den user?

    Du musst alle IPs und den jeweils aktuellen Zeitstempel in einer Liste speichern. Du könntest zum Beispiel eine Datenbank haben, die eine Tabelle mit folgenden Feldern besitzt: IP-Adresse, Zeitstempel

    Sobald jemand auf den Counter zugreift, passiert folgendes:

    • Alle veralteten Einträge rauswerfen (d.h. wo der Zeitstempel der Einträge kleiner als aktueller Zeitstempel minus x Minuten ist) - das geht wunderbar mit einem bedingten DELETE
    • Nachsehen, ob die aktuelle IP bereits vorhanden ist
    • Falls ja: einfach den Counter ausgeben
    • Falls nein: die IP mit aktuellem Zeitstempel hinzufügen, Counter um eins erhöhen und dann erst den Counter ausgeben

    Also in Pseudo-PHP-Code:

    loesche_alte_eintraege ();

    if (!aktuelle_ip_schon_vorhanden ()) {
      fuege_aktuelle_ip_ein ();
      erhoehe_counter();
    }

    gebe_counter_aus();

    Über Sinn und Unsinn eines Counters wurde schon sehr häufig diskutiert.

    Viele Grüße,
    Christian

  4. Hallo,
    wollte es jetzt mit einem cookie machen.

    funzt nur nicht. es wird jetzt immer gezählt.

    wo ist der fehler??

    <?php
    include("../db.inc.php");

    $anzahl_hits = $datensatz[num_visits];
    //$last_ip = $datensatz[last_ip];

    $remote = $REMOTE_ADDR;

    if ($remote == $last_ip) {
     //Hit wird nicht gezaehlt
    } else {
     @setcookie( "last_ip", $remote, time()+900, "/", 0);

    $new_hit = $anzahl_hits + 1;

    mysql_connect("localhost", "$benutzer", "$passwort");
     mysql_select_db("$db");
     $sql = "UPDATE sd_models set last_ip = "$remote",num_visits = "$new_hit" WHERE user = '$user'";
     $result = mysql_query($sql);
     mysql_close();
      }

    //Hits anzeigen
     echo "<b>SedCard aufrufe: $datensatz[num_visits]</b>";
    ?>

    mfg,
    Patrick

    1. Hallo,

      Hi

      Ich bediene mich jetzt auch einfach mal dem "Pseudo-PHP-Code":

      if(!cookie_ist_gesetzt()) {
        setze_cookie();
        zähler_plus_eins();
      }

      zeige_counter();

      mfg,
      Patrick

      Philip