cookie-ip-gateway-sperre

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • cookie-ip-gateway-sperre

    Hi,

    folgenden Code benutze ich um klicks zu zählenund zu dokumentieren.

    Nebenbei alles hier gesammelt.

    Aber dielogs werden schnell grösser!
    Kann mir jemand schreiben, wie ich einen sperre für dauerklicker reinkriege?

    habe bereits mehrere beiträge zu den verschiedenen methoden gelesen, aber bin mir nicht sicher!!

    <?php
    require "config.php";

    $mysql_link = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
    $sql = "UPDATE $mysql_table SET reinklick=reinklick+1 WHERE id = '$id'";
    $insert = mysql_db_query($mysql_base, $sql, $mysql_link);
    mysql_close($mysql_link);
    }
    if ( isset( $id)) {
    $ref = dirname(__FILE__)."/referer/$id";

    if (!file_exists($ref)) {
    $fp = fopen($ref, "w");
    fwrite($fp, "");
    }

    if ($REMOTE_ADDR == "") $ip = "IP-Adresse";
    else $ip = $REMOTE_ADDR;
    if ($HTTP_USER_AGENT == "") $user_agent = "wat";
    else $user_agent = $HTTP_USER_AGENT;
    if ($HTTP_REFERER == "") $referer = "Keine Herkunftsadresse";
    else $referer = $HTTP_REFERER;
    $date = gmdate($date_format);
    $log = "|$date|$id|$referer|$ip|$user_agent\n";
    if($fd = @fopen($ref, "a")) {
    fputs($fd, $log);
    fclose($fd);

    } }

    header("Location: $mainurl");

    ?>

  • #2
    in welchen intervallen sollen sie denn gesperrt sein ?

    Naja ich würde einfach eine Tabelle anlegen mit den IPs der letzten 10 sec. (ist beliebig, je nach Sperrzeit) und wenn dann eine IP wiederkehrt dann wird sie nicht gezählt, ist natürlich kein floodingschutz aber immerhin wird der klick nicht gezählt.

    Kommentar


    • #3
      Die Sperrzeit ist egal, aber so um die 2h sollten es schon sein.


      Hat jemand noch eine bessere Idee??
      habs jetzt so gelöst--->

      <?php

      // Adminbereichseinstellungen übernehmen
      require "config.php";

      // ID ermitteln
      if ( isset( $id)) {

      //Pfad zur Logdatei bestimmen
      $ref = dirname(__FILE__)."/referer/$id";

      // Existenz überprüfen ==> falls nicht vorhanden erstellen
      if (!file_exists($ref)) {
      $fp = fopen($ref, "w");
      fwrite($fp, "");
      }

      // Anzahl der Einträge ermitteln und den letzten auslesen
      $file_content = file ($ref);
      for ($i=0; $i<count($file_content);$i++)
      $data= explode ('|', $file_content[$i]);
      $Var1 = $data[1];
      $Var2 = $data[2];
      $Var3 = $data[3];
      $Var4 = $data[4];
      $Var5 = $data[5];

      // IP-Adresse mit der zuletzt gespeicherten vergleichen und die Einstellung im Adminbereich überprüfen
      if (($REMOTE_ADDR != $data[4]) || ($IP_Sperre != "an")) {
      $mysql_link = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
      $sql = "UPDATE $mysql_table SET reinklick=reinklick+1 WHERE id = '$id'";
      $insert = mysql_db_query($mysql_base, $sql, $mysql_link);
      mysql_close($mysql_link);

      // Daten zum Speichern in der Log-datei feststellen und speichern
      $date_format = "H:i:s, d/M/Y";
      if ($REMOTE_ADDR == "") $ip = "IP-Adresse";
      else $ip = $REMOTE_ADDR;
      if ($HTTP_USER_AGENT == "") $user_agent = "wat";
      else $user_agent = $HTTP_USER_AGENT;
      if ($HTTP_REFERER == "") $referer = "Keine Herkunftsadresse";
      else $referer = $HTTP_REFERER;
      $date = date($date_format);
      $log = "|$date|$id|$referer|$ip|$user_agent\n";
      if($fd = @fopen($ref, "a")) {
      fputs($fd, $log);
      fclose($fd);

      } }}
      // Zur Chartsliste
      header("Location: $mainurl");

      ?>

      Oder dauert das zu lange???

      mfg
      Mosef

      Kommentar


      • #4
        Das Problem ist wohl weniger dass es zu lange dauert, als dass du Probleme bekommst, wenn zwei Leute gleichzeitig auf das Skript zugreifen.
        Außerdem fehlen da geschweifte Klammern um die Schleife.

        Da du anscheinend eine DB zur Verfügung hast, würde ich die auch nutzen. Erstelle folgende Tabelle:
        CREATE TABLE ZUGRIFF (
        IP varchar(15) NOT NULL,
        ZEIT datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
        PRIMARY KEY (IP)
        );

        Um IPs zu sperren, packst du einfach einen Datensatz mit den IPs in die Tabelle, ohne eine ZEIT anzugeben.
        Mit der folgenden Abfrage kannst du sogar komplette IP-Gruppen sperren: 192.% sperrt alle IPs, die mit 192. anfangen.
        Code:
        //[b]IP-Sperre abfragen:[/b]
        $q = mysql_query ("select * from ZUGRIFF
          where '$REMOTE_ADDR' like IP
          and ZEIT='0000-00-00 00:00:00'");
        if (mysql_num_rows($q)) $IP_SPERRE=true;
        
        //[b]Counter erhöhen?[/b]
        $q = mysql_query ("select ZEIT from ZUGRIFF where IP='$REMOTE_ADDR'");
        $ok = true;
        if ($t = mysql_fetch_row($q))
        {
          if (date('Y-m-d h:i:s', time()+7200) <= $t[0])
            $ok = false;
        }
        if ($ok)
        {
          $date = date('Y-m-d H:i:s');
          if ($t)
            mysql_query ("update ZUGRIFF set ZEIT='$date' where IP='$REMOTE_ADDR'");
          else
            mysql_query ("insert into ZUGRIFF (IP,ZEIT) values ('$REMOTE_ADDR', '$date')");
          //[b]jetzt den Counter hochzählen[/b]
          [i](mußt du noch einbauen)[/i]
        }
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Ein Nachzügler kommt

          Hallo,

          hab den Code gerade mal ausprobiert. Funzt alles wunderbar. Wie kann ich jetzt eine Zeit eintragen die $ok wieder auf true setzt. Z.B einen Tag oder eine Stunde ??

          Kann mir da jemand helfen....

          THANX A LOT

          Kommentar


          • #6
            Nach oben schieb

            Hallo zusammen,

            hat jemand vielleicht doch ne Idee ??

            THANX A LOT

            Kommentar


            • #7
              time()+7200

              da versteckt sich das "jetzt + 7200 Sekunden" = "jetzt + 2 Stunden"

              Mach draus, was du gerne hättest.
              mein Sport: mein Frühstück: meine Arbeit:

              Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

              Kommentar

              Lädt...
              X