session_destroy() Fragen

codeguru

nicht mehr wegzudenken
hi!
ich hab da ein kleines Problem unter PHP:

Ich hab eine kleine Internetanwendung gebastelt, welche einein Teil der Userdaten an eine SessionID koppelt.

Der User sollte sich aber auch ausloggen können :) deshalb hab ich ne Seite gebaut die ein session_destroy() aufruft.

Nun hab ich festgestellt, daß session_destroy() die Session nur dann zerstört wenn man das Browserfenster schließt. Wenn man nach der Logoutseite auf eine andere Seite kommt kriegt man bei session_start() DIESELBE Session ID zugewiesen, und das ist definitiv nicht erwünscht.

Der IE7 meldet nach dem Öffnen eines neuen Browserfensters eine neue session id, der Firefox 3 nicht. Der meldet ums verrecken die selbe sessionid.

Kann man da noch was machen?

p.s. beim Firefox 3 muß man alle browserfenster schließen, beim IE7 reicht das Schließen des aktuellen Browserfensters aus.
 
Zuletzt bearbeitet:
hey danke, der Firefox "vergißt" nun die session wenn man das aktuelle Browserfenster schließt. Vielleicht war da auch ein Update dran schuld das sich vor 30 Minuten eingespielt hat :(

Allerdings - sollte nicht bei Session_start() nach einem Session_destroy() nicht ne andere Sessionid erzeugt werden?
Ich bin schon auf die Idee gekommen, meine eingenen Sessionvariablen zu löschen, aber genaugenommen ist die SessionID nicht verläßlich, ich werd wohl meinen Code auf eine uuid umstellen. Die Idee war, wenn sich ein neuer User anmeldet, und ich mach ein Insert, dann weiß ich nicht welche Userid er hat. Also pack ich beim Insert eine mir bekannte Zahl rein und im nächsten Fenster mach ich ein Select darauf.

Ich werd anstelle der SessionID eine UUID verwenden, die ist dann WIRKLICH eindeutig.

Ein Beispiel warum man die SessionID nicht nehmen darf um neuen Usern eine Zufallszahl zuzuordnen:

http://www.jargal.net/sessiontest.php

Da ist dieser Code drin:

<?PHP
if ( session_start () )
{
echo 'Session wurde erstellt!';
}

echo '<br>';

if ( session_id () )
{
echo session_id ();
}

echo '<br>';

$_SESSION=array();
session_destroy ();


if ( ! session_id () )
{
echo 'Session-ID wurde zerstört';
}
?>

ohne das Browserfenster zu schließen ist die SessionID dieselbe wie man unschwer mit F5 feststellen kann. Ich kann aber leider den Browser nicht mit irgendwelchen Befehlen verläßlich schließen, das wird auf einigen Systemen mit einer Warn oder Fehlermeldung quittiert.

Bzw. durch dieses Phänomen hab ich nun gelernt wofür man nämlcih die SessionID NICHT nehmen sollte.... weil sonst der nächste User am Browserfenster die Daten des zuletzt eingeloggten Users zu sehen kriegt und das wäre grob gesagt ein Sicherheitsloch.
 
so das isses - ab PHP5 geht das.

$uuid=md5(uniqid(rand(), true)); - das ist einigermaßen zufällig.

Wenn man die SessionID mit ranhängt dann ist die Zahl an Zufälligkeit nicht mehr zu überbieten

Die uniqid() Funktion liefert einen String basierend auf die Serverlaufzeit in ms. Wenn nun aber zwei User auf zwei unterschiedlichen Rechnern zur selben Zeit diese Funktion aufrufen.... dann haben sie aber definitiv ne unterschiedliche SessionID, selbst wenn uniqid() ein identisches Ergebnis liefern sollte

$uuid=md5(uniqid(rand(), true));
 
Oben