Sessionproblemchen ... und ich komme nicht dahinter. :(
hoshi
- php
0 Der Martin0 cross
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?
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
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.
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
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
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