Sessions-Problem
harald schohn
- php
Moin!
Ich habe folgendes Problem:
ich habe eine Seite mit einem Formularfeld "name". Gibt man hier z.B. "harald" ein, wird die Variable Name auf die nächste Seite übergeben.
Die 2. Seite beginnt folgendermaßen:
<?
session_start();
session_register("name");
?>
Wird hier die Variable $name abgefragt wird "harald" ausgegeben.
Soweit alles in Ordnung. Schließe ich nun aber das Fenster und öffne anschließend ein Neues und rufe die 1.Seite wieder auf und gebe z.B. "rainer" in das Formularfeld ein, dann wird bei der Abfrage der Variablen $name wieder "harald" angezeigt.
Es scheint also, dass die erste Session wieder aufgegriffen und keine neue erzeugt wird. Woran liegt das?
Hallo Harald,
erstens solltest Du ab PHP 4.0.2 nicht mehr die session_register()-Funktion und Ihre Brüder benutzen, sondern die Daten direkt in das Array mit dem Namen $HTTP_SESSION_VARS["name"] oder ab PHP 4.2.3 (davor gabs noch ein paar kleinere[tm] Bugs) in $_SESSION["name"] schreiben.
Damit das Ganze dann auch sicher funktioniert, sollte register_globals in der php.ini auf off stehen.
Wenn Du eine Session mit session_register() startest, gilt die in aller Regel für alle Seiten der Domain. Das kann man umkonfigurieren, ist aber so erstmal der übliche Default.
Wenn Du möchtest, dass eine neue Session (mit temporären Cookies) gestartet wird, dann, musst Du entweder alle Fenster des Browsers schließen und einen neuen öffnen, oder den "Session-Cookie" per
setcookie("PHPSESSID");
zerstören.
Darüberhinaus kannst Du auch noch die Sessiondaten auf dem Server mit
session_start();
session_destroy();
zerstören, also die Sessiondatei im TMP-Verzeichnis löschen).
Das zerstören des Cookies muss aber ein zusätzlicher Request/Response sein.
Alternativ kannst Du auch einfach:
unset($_COOKIE["PHPSESSID"]);
schreiben. Wenn Du dann anschließend session_start() aufrufst, wird eine neue Session gestartet.
Liebe Grüße aus http://www.braunschweig.de
Tom
Wenn Du eine Session mit session_register() startest, gilt die in aller Regel für alle Seiten der Domain. Das kann man umkonfigurieren, ist aber so erstmal der übliche Default.
Einspruch, das ist nicht sein Problem :) Sein Problem wahrscheinlich eher, daß die Session-ID in einem Cookie gespeichert wird und Cookies pro Benutzer gelten und nicht pro Browserfenster. Öffnet er also sein zweites Browserfenster, benutzt dieses die gleichen Cookiedaten wie das erste Browserfenster und damit logischerweise auch die gleiche Session.
Falls mit "zweites Browserfenster" allerdings "Browser beenden und dann neu starten" gemeint ist (das ging nicht so ganz eindeutig hervor), kann auch die Einstellung für die Lebensdauer der Cookies namens session.cookie_lifetime falsch sein. Sie sollte auf 0 stehen, damit der Keks mit dem Beenden des Browsers automatisch verschwindet (und somit auch die Zugriffsmöglichkeit auf die Sitzung).
Dritte Möglichkeit: Programmier-/Denkfehler. Ich konnte jedenfalls nicht genau erkennen, ob Harald das (2.) Formular mit "rainer" auch tatsächlich abgeschickt hat oder nicht.
Gruß,
soenk.e