hoshi: Sessionproblemchen ... und ich komme nicht dahinter. :(

Moin zusammen,

Ich gehe mal davon aus, dass ich den Wald vor lauter Bäumen nicht sehe, aber vielleicht sieht ihn ja sonst jemand.

Es geht um das sessionbasierende Loginsystem, welches hier auf diesen Seiten beschrieben wird, genauer gesagt um die Datei auth.php, welche ich für eigene Zwecke ein wenig modifiziert habe.

Ich möchte ganz einfach unter bestimmten Umständen eine Session beendet haben, ohne serverseitig die PHP.ini zu modifizieren, und habe deswegen das Folgende gemacht:

Beim Aufruf meiner Index-Datei starte ich eine neue Session, hier der Code hierzu:

<?PHP
SESSION_START();
if (!$_SESSION['PDV'])
{
$_SESSION['PDV']= TRUE;
$_SESSION['IP']= $_SERVER['REMOTE_ADDR']; // Speichert die momentane IP-Adresse
$_SESSION['Start']= time(); // Ermittelt die Startzeit der aktuellen Session
$_SESSION['Ende'] = $_SESSION['Start'] +3600; // Session zerstört sich nach einer Stunde selbst
}
?>
<html><body> usw. usw.

Die Auth.php, welche einfach wie in oben genanntem Link beschrieben in Unterseiten eingebunden wird, habe ich folgendermasen erweitert:

<?php
session_start();
$hostname = $_SERVER['HTTP_HOST'];
$path = dirname($_SERVER['PHP_SELF']);
$curtime = time();
$curIP   = $_SERVER['REMOTE_ADDR'];

if (!isset($\_SESSION['PDV']) // Wert überhaupt vorhanden?  
	|| !$\_SESSION['PDV'] // Wert TRUE?  
	|| ($curtime >= $\_SESSION['Ende']) // Aktuelle Zeit grösser?  
	|| ($curIP != $\_SESSION['IP']) // Passt die IP?  
) {  
$\_SESSION['PDV']= FALSE; // Sicherheitshalber zurücksetzen  
$\_SESSION = array(); // Session-Array leeren  
if (isset($\_COOKIE[session\_name()])) { setcookie(session\_name(), '', time()-42000, '/'); } // Cookie vorhanden, dann weg damit  
session\_destroy(); // Session zerstört  
header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php'); // ... und zurück auf die Hauptseite  

exit;
      }
?>

Das funktioniert soweit auch alles, nur eines kommt mir spanisch vor und ich komme nicht dahinter. Mein PC ist idR 24/7 online, und der rosa Riese gibt mir nachts um halb Zwei eine neue IP.
Wenn ich nun morgens an den PC gehe, und einfach mal die Index.php anklicke, dann behält er trotz einer geänderten IP-Adresse die Session-ID. Und ich komme nicht dahinter warum. Ideen?

  1. Hi,

    $_SESSION['PDV']= FALSE; // Sicherheitshalber zurücksetzen
    $_SESSION = array(); // Session-Array leeren

    das ist nicht sinnvoll: Erst einen Wert im Session-Array setzen, dann das ganze Array löschen? ;-)

    Das funktioniert soweit auch alles, nur eines kommt mir spanisch vor und ich komme nicht dahinter. Mein PC ist idR 24/7 online, und der rosa Riese gibt mir nachts um halb Zwei eine neue IP.
    Wenn ich nun morgens an den PC gehe, und einfach mal die Index.php anklicke, dann behält er trotz einer geänderten IP-Adresse die Session-ID. Und ich komme nicht dahinter warum. Ideen?

    Hast du mal überprüft, welche IP-Adresse dein Script tatsächlich "sieht"? Vielleicht ist es nicht deine eigene, sondern die eines Proxies, den der "Rosa Riese" dir automatisch unterschiebt.

    So long,
     Martin

    --
    Viele Fachleute vertreten die Ansicht, jedes Feature eines Programms, das sich nicht auf Wunsch abstellen lässt, sei ein Bug.
    Außer bei Microsoft. Da ist es umgekehrt.
    1. das ist nicht sinnvoll: Erst einen Wert im Session-Array setzen, dann das ganze Array löschen? ;-)

      Deswegen steht da ja auch "sicherheitshalber". :p

      Hast du mal überprüft, welche IP-Adresse dein Script tatsächlich "sieht"? Vielleicht ist es nicht deine eigene, sondern die eines Proxies, den der "Rosa Riese" dir automatisch unterschiebt.

      Das Skript sieht tatsächlich eine neue IP-Adresse, welche ich mir atm mittels der Index.php immer mit ausgeben lasse.

      Dort habe ich zu Testzwecken einfach eine Ausgabe gemacht, die mir z.B. sowas anzeigt:

      Session gestartet: 1274098999
      Session endet: 1274102599
      Aktueller Wert: 1274098999
      Aktuelle IP: 88.134.24.255
      Aktuelle Session: qjto3ado4v3l0ivra79g8e4976

      Wenn ich nun morgens hier einfach ein Reload mache, dann steht da eine neue IP, aber die SID ist immer noch identisch. Und Ja, ich weiss dies ist keine Teledoof-IP. War nur als Beispiel da jetzt mal hingeschrieben.

      1. Hallo :)

        Wenn ich nun morgens hier einfach ein Reload mache, dann steht da eine neue IP, aber die SID ist immer noch identisch.

        Passt das zu deiner Frage?
        http://www.php-faq.de/q-sessions-ip.html

        mfg
        cygnus

        --
        Die Sache mit der Angel und dem  ><o(((°>  hat immer einen Haken ...
  2. Hallöchen auch,

    Moin zusammen,

    Ich gehe mal davon aus, dass ich den Wald vor lauter Bäumen nicht sehe, aber vielleicht sieht ihn ja sonst jemand.

    <cut>

    Beim Aufruf meiner Index-Datei starte ich eine neue Session, hier der Code hierzu:

    <?PHP
    SESSION_START();

    <cut>

    Die Auth.php, welche einfach wie in oben genanntem Link beschrieben in Unterseiten eingebunden wird, habe ich folgendermasen erweitert:

    <?php
    session_start();

    Mal zu meinem Verständnis:
    Ist SESSION_START() das selbe wie session_start()?

    MfG
    cross

    1. Hallo,

      Mal zu meinem Verständnis:
      Ist SESSION_START() das selbe wie session_start()?

      ja, PHP ist da ziemlich eigenartig. PHP unterscheidet Groß- und Kleinschreibung bei Variablennamen, nicht aber bei Funktionsnamen. Ich finde das inkonsequent, und definitiv nicht gut, aber wer fragt mich schon ...

      Abgesehen davon ist es natürlich empfehlenswert, die Namen wenigstens einheitlich zu schreiben.

      Ciao,
       Martin

      --
      ... und der FDP-Wähler gibt seine Stimme der FDP.
         (Faszinierende Erkenntnis meines Gemeinschaftskunde-Lehrers, 9. Schuljahr)