Tutorial: PHP IP Sperre ohne Datenbank

Weil ich eine Anfrage zur Erweiterung meines Layer Skriptes bekommen habe, möchte ich euch heute zeigen wie ihr ganz einfach eine IP Sperre in PHP erstellen könnt. Falls es dir noch nichts sagen sollte, man kann es auch eine PHP Reload Sperre nennen und dies wird vor allem bei Layern eingesetzt, damit diese nur beim ersten Seitenaufruf alle 24 Stunden aufgerufen werden. Für dieses Skript braucht ihr keine Datenbank, allerdings wird hier eine Session verwendet, welche je nach Servereinstellung nach zirka 10-15 Minuten nicht mehr gültig ist. Also falls euer Besucher eure Seite nach 1 Stunde wieder besucht, wird eure Werbung trotzdem nocheinmal angezeigt.

Falls man wirklich eine 24 Stunden IP Sperre realisieren möchte, sollte man mit einer Datenbank (z.B.: MySql) arbeiten, allerdings müsst ihr eure Besucher darauf hinweisen, dass ihr die IP Adressen für eine gewisse Zeit mitspeichert. Allerdings sollte dieses Skript für die meisten Seiten ausreichend sein, außer ihr wollte es auf einer Community oder einer ähnlichen Seite einbauen, welche die Besucher mehrmals am Tag besuchen. Aber jetzt hab ich genug geschrieben, kommen wir zum eigentlichen PHP Skript.

<?php
//Unbedingt Session Starten, sonst gehen die Daten des Session-Arrays verloren
session_start();
//Vor dem Aufruf der Werbung die Sperrvariable abfragen
//Sekunden*Minuten*Stunden ==> 60*60*24 = 24h Sperre
if(!isset($_SESSION['ip-sperre'])||$_SESSION['ip-sperre']<time()-60*60*24){
//Speichern der aktuellen Zeit in den Session-Array
$_SESSION["ip-sperre"] = time();
echo "Werbung: <a href='http://www.devno.com'>Anleitungen für PHP</a>";
}
else{
echo "Hallo, du bekommst keine Werbung angezeigt,
weil du schon am ".date("d.m.Y", $_SESSION['ip-sperre']).
" um ".date("h:i", $_SESSION['ip-sperre'])." diese Seite besucht hast.";
}
?>

Sehr wichtig ist, dass ihr bei jedem Aufruf eurer Seite die Funktion session_start() aufruft, weil sonst die gespeicherten Daten in dem Session Array verloren gehen. Falls ihr einen Blog verwendet sollte diese Funktion bereits aufgerufen werden und ihr müsst euch nicht weiter drum kümmern.

Das Skript funktioniert so, dass wir einfach bei jedem Aufruf der Werbung die aktuelle Zeit in den Session Array speichern. Diesen merkt sich der Webserver (PHP) für jeden einzelnen Client und kann diesen solange abrufen, wie die Session gültig ist. Bevor wir die Werbung anzeigen überprüfen wir einfach, ob ein Zeitpunkt gespeichert wurde bzw. ob der gespeicherte Zeitpunkt schon mehr als 24 Stunden zurückliegt (if(!isset($_SESSION[‚ip-sperre‘])||$_SESSION[‚ip-sperre‘]<time()-60*60*24)). In der Else Verzweigung könnt ihr irgendetwas anderes Anzeigen lassen oder es einfach weg lassen.

Mein Beispiel Skript könnt ihr hier probieren und auf die Funktion überprüfen. Es ist 1 zu 1 das Skript von oben und hat eine Ip Sperre von 24 Stunden.

Suchbegriffe:

php ip sperre, ip sperre php, php ip sperren, IP sperren php

3 Responses to “Tutorial: PHP IP Sperre ohne Datenbank”

  1. maXus

    Ich würde für einen Layer keine IP Sperre auf PHP Basis nutzen. Nimm lieber ein Cookie. Macht nicht so viele Probleme, man braucht kein PHP und kann es somit auch in HTML Seiten nutzen, belastet den Server nicht weiter, da alles Clientseitig abläuft. Vom Prinzip her ist es das Gleiche. Sehe da sogar einige Vorteile, wie das Speichern weiterer Informationen, wie beispielsweise welcher Inhalt eingeblendet wurde und das über 24 Stunden, da sich die IP bei den Meisten nach dieser Zeit ja eh ändert.

    Gruß maXus

    Antworten
  2. devno

    Hallo maXus,

    es ist natürlich auch leicht möglich eine IP Sperre mit Hilfe von Cookies zu realisieren, allerdings könnte es sein das Besucher diese nicht zulassen und somit würden sie bei jedem Seitenaufruf einen Layer angezeigt bekommen. Dies ist bei diesem Skript nicht möglich.

    Die Belastung durch PHP sollte allerdings fast nicht spürbar sein, allerdings hast du recht falls man eine IP Sperre für eine HTML Seite haben möchte ist dieses Skript sicherlich nicht optimal.

    Antworten
  3. Anonymous

    Sessions werden auch in Cookies gespeichert, ausser, die Session-ID wird per GET an die entsprechende uebergeben!

    Antworten

Leave a Reply