Christoph Zurnieden: IP-Sperre

Beitrag lesen

Hi,

Datenbanken selber bekomm ich ja mit Access hin,

Ich befürchte _damit_ hast Du selbst den sehr verehrten Kollegen Rolf ... ähem ... irritiert ;-)

aber das mit der SQL-Abfrage wird dann schon wieder nichts, deswegen muss ich wissen wie der Skript selber aussieht, damit ich einen Skript fertig stellen kann. Könntest du mir freundlicher Weise diesen Codeschnipsel zur Abfrage der Ip erstellen, für die User überprüfung geschieht dann ja das gleiche nur mit andern Variablen und anderen NAmen der DB.
Hoffe du machst das für mich bitte bitte!

Nein, sowas gibt's hier nicht. Aber eine Erklärung des Vorgangs in iplock() hier http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?display=16&id=15 kann ich natürlich gerne erledigen:

(Ich erlaube mir mal ein C&P, hoffe das geht i.O.)

globale Variable, die einen Wert enthält,der später als Timeoutwert

fungiert.

my $locktime = 20;

sub iplock{

in REMOTE_ADDR ist dei IP des Abrufenden drin.

Das ist im Falle von CGI in den Umgebungsvariablen enthalten

Diese lassen sich mit $ENV{'UMGEBUNGSVARIABLE'} auslesen.

in der Variablen $ip ist nun die IP des Kunden

my $ip = $ENV{'REMOTE_ADDR'};

time gibt die Zeit zurück und zwar in Sekunden seit dem 1.1.1970

in der Variablen $ctime ist also die aktuelle, sekundengenaue Zeit drin

my $ctime = time;

Die Variable $lockdb ist der Anschluß zur Datenbank, $lockdb{$ip}

fragt demnach das ab, was unter der IP als Schlüssel gespeichert

ist. Wie man etwas später sieht, ist das ein Zeitstempel.

Jetzt wird von der aktuellen Zeit die gepeicherte Zeit abgezogen

und in der Variablen $diff abgelegt.

my $diff = $ctime - $lockdb{$ip};

Wenn nun die in $diff gespeichert Zahl größer ist als

$locktime, also größer 20 Sekunden ist...

if($diff > $locktime){

... wird die aktuelle Zeit in der DB unter der IP gespeichert ...

$lockdb{$ip} = $ctime;

... und diese Funktion abgeschlossen.

return;
  }

Wenn das aber nicht der Fall ist (z.B. der Kunde zweimal kurz (< 20

Sekunden) hintereinander auf "Absenden" gecklickt hat) dann ..

else{

wird folgende Meldung ausgegeben ...

print qq(
      <p>Bitte keine Mehrfachpostings.
      $index
      );

und abgebrochen (Ist das nicht ein _wenig_ brutal Rolf? ;-)

exit;
  }

hier kann man eigentlich nicht ankommen,aber gibt wahrscheinlich

sonst Fehlermeldungen.

return;
}

so short

Christoph Zurnieden