IP der Vorseite vergleichen

Memfis

Erfahrenes Mitglied
Moin Forum und Members,

ich habe ein kleines Loginsystem programmiert (u.a. mit Zuhilfenahme des Tutorials auf dieser Seite. Nun möchte ich noch eine IP-Abfrage einbauen, d.h. ich will immer gucken, ob sich von Seitenaufruf zu Seitenaufruf die IP geändert hat und falls das der Fall ist soll der eingeloggte User sofort ausgeloggt werden. Jetzt weis ich nur nicht, wie ich das machen soll. Den Befehl
PHP:
$_SERVER['REMOTE_ADDR']
kenn ich, weis ihn in diesem Fall aber nicht so anzuwenden, dass er die IP der vorseite vergleicht.
 
Du arbeitest doch sicher mit Sessions.
Dann kannst Du doch ganz einfach die SessionID und die IP zusammen in der Datenbank speichern und bei jedem Seitenaufruf ueberpruefen.
Wenn sich die IP zur SessionID aendert loeschst Du die Session, loeschst die Daten aus der Datenbank und der User darf sich erneut einloggen.
 
Ja, aber ich möchte nicht jeden Krempel über die Datenbank machen, wenn es eine bessere Lösung gibt. Ich mach schon so viel über die DB. Ich versuche immer so sparsam wie möglich zu programmieren und wenn es die Möglichkeit gibt die IP der Vorseite irgendwie "mit zu nehmen" dann würde ich das auch gerne tun, ohne direkt die Datenbank belästigen zu müssen.
 
Habe jetzt einen Ansatz, funktioniert aber nicht

seesions.php
PHP:
...
$_SESSION['username'] = $data_sid[1]."<br /n>";
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];

intern.php
PHP:
session_start();
if (isset ($_SESSION["username"])." and ".($_SESSION['ip']) == $_SERVER['REMOTE_ADDR']) 
{ 
  echo $_SESSION['username']; <-- sagt er
  echo "IP:". $_SESSION['ip']; <-- sagt er nicht
  echo "Remote IP:". $_SERVER['REMOTE_ADDR'];} <-- sagt er
...

Wo der Fehler ist ist mir jetzt klar, nur warum er die Variable nicht übergibt ist mir weniger klar.
Edit: Ich schreibe die Session in keine Datenbank. Übergebe ich so.
 
Habs hinbekommen.

Hier die Scripte:

session.php
========
PHP:
... 
$_SESSION['username'] = $data_sid[1]."<br /n>";
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
...

intern.php (Die echos sind drinnen um nachvollziehen zu können was in welcher Variable steht)
=======
PHP:
<?php
session_start();
if (isset ($_SESSION["username"])){
if ($_SESSION['ip'] == $_SERVER['REMOTE_ADDR']){
  echo $_SESSION['username'];
  echo "IP:". $_SESSION['ip'];
  echo "Remote IP:". $_SERVER['REMOTE_ADDR'];
}} else{ echo "Nicht (mehr) eingeloggt. Ein Fehler ist aufgetreten";
  echo "IP:". $_SESSION['ip'];
  echo "Remote IP:". $_SERVER['REMOTE_ADDR'];
} ?>

Leider funktioniert die else-Schleife nicht. Dennoch scheint der IP-Check an sich zu funktionieren, zumindest bekomme ich eine leere Seite angezeigt, wenn ich die IP (mittels Proxy) ändere und die Seite mit gleicher Seesions-ID aufrufen will. Stelle ich die IP zurück kommt wieder den gewünschte Inhalt. (Weil ich die Seesion noch nicht gelöscht habe) Wenn wer die else-Schleife fixen kann und will kann er das gerne tun, ansonsten ist das Thema erledigt. Sollte wer feststellen, dass dieses Script nicht funktionieren kann (Achtung: Von session.php habe ich nur einen Codeschnipsel gepostet) und es bei mir nur „zufällig“ funktioniert, soll er das bitte mitteilen.
 
Zuletzt bearbeitet:
Das hier:
PHP:
<?php
session_start();
if (isset ($_SESSION["username"])){
if ($_SESSION['ip'] == $_SERVER['REMOTE_ADDR']){
  echo $_SESSION['username'];
  echo "IP:". $_SESSION['ip'];
  echo "Remote IP:". $_SERVER['REMOTE_ADDR'];
}} else{ echo "Nicht (mehr) eingeloggt. Ein Fehler ist aufgetreten";
  echo "IP:". $_SESSION['ip'];
  echo "Remote IP:". $_SERVER['REMOTE_ADDR'];
} ?>
muss eher so:
PHP:
<?php
session_start();
if (isset ($_SESSION["username"]))
 {
  if ($_SESSION['ip'] == $_SERVER['REMOTE_ADDR'])
   {
    echo $_SESSION['username'];
    echo "IP:". $_SESSION['ip'];
    echo "Remote IP:". $_SERVER['REMOTE_ADDR'];
   }
  else
   {
    echo "Nicht (mehr) eingeloggt. Ein Fehler ist aufgetreten";
    echo "IP:". $_SESSION['ip'];
    echo "Remote IP:". $_SERVER['REMOTE_ADDR'];
   }
 }
?>
glaube ich.
 
Zurück