PHP: IP-Adresse eines Besuchers ermitteln
Es scheint ganz einfach zu sein: Mit welcher IP-Adresse jemand arbeitet, bekommt man über den Ausdruck $_SERVER['REMOTE_ADDR'] heraus.
Das stimmt meistens - aber eben nicht immer. Verwendet der Besucher einen Proxy-Server, dann liefert diese Systemvariable die IP-Adresse des Servers. In diesem Fall sendet der Proxy-Server allerdings auch die Adresse des Benutzer-Computers mit. Sie ist dann in der Variablen $_SERVER['HTTP_X_FORWARDED_FOR'] abzulesen.
Um die IP-Adresse zu ermitteln, könnte man beispielsweise untenstehenden Code verwenden.
Aber Achtung: Um den Benutzer eindeutig zu identifizieren, eignet sich die IP-Adresse prinzipiell nicht. Denn wenn mehrere Benutzer beispielsweise über einen DSL-Router auf Ihre Webseite zugreifen, erscheinen sie beide mit der Adresse, die der Internet-Provider dem Router bei der Einwahl gibt. Im Fall der Proxy-Benutzung wird obiger Code private Adressen ermitteln, also etwa der Form 192.168.x.x. Nachdem zwei ganz verschiedene Besucher in verschiedenen LANs dieselbe private IP-Adresse haben können, ist auch in diesem Fall eine Verwechslung nicht ausgeschlossen.
if (! isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
else {
$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
Hi,
Bei dem obigen Code fehlt eine Klammer!
if (! isset($_SERVER['HTTP_X_FORWARDED_FOR']) {
Muss so aussehen:
if (! isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
[Diddi | 08.01.2009]
Antworten
falsch!
Es fehlt eine Klammer ;-)
[froechrissi | 25.12.2009]
Antworten
Tja, man sollte den Code Testen bevor man ihn Publiziert
[Moritz Mahringer | 07.11.2010]
Antworten
danke, wir haben den Fehler korrigiert
[Markus (strassenprogrammierer.de) | 21.02.2011]
Antworten
Wie sollte ein Proxy die private IP mitliefern? Das halte ich für
ziemlichen Unsinn. Es sei denn Du redest vom Routing im LAN und dann
dürfte der Proxy doch ebenfalls ne private IP besitzen.
[nk | 24.10.2011]
Antworten
Bedingungen für die Kommentareingabe
Hinweis
Add to Del.icio.us