- Am wichtigsten ist, am Ende einer Session diese auf _explizit_ zu beenden!!!!!!
Du meinst also, ich soll auch nochmal (für den Fall, dass keine Cookies gespeichert werden können) die SID vom "geschützten Bereich" zur 'logout.php' per GET übergeben, damit die Session auch ordentlich abgeschlossen werden kann? Ist das mein Fehler?
Nein, ich meine ganz simpel das Pendant zu session_start() - also
session_stop() (oder so ähnlich - habe jetzt keine Lust im Doku
nachzuschauen).
Im Normalfall (du kannst das gesamte Session Handling aber auch selbst übernehmen - siehe Handbuch) werden die Session Daten in irgendeinen
Session File als serialisierte Daten gespeichert. Diese Datei sollte
weg! Das erledigst du mit session_stop() - und dies sollte in der
logout Routine stehen ...
Dann gibts da noch den Fall, das sich jemand nich abmeldet. Das
Session System von PHP hat das ein Aufräumssystem vorgesehen (bei
JEDEM session_start() (also auch von "Nachbarprogrammen") wird im
dem Direktory, in dem die Session Dateien liegen, nach alten Session
Files geguckt und diese gelöscht (auch dieses Handling - sesson_garbage()
oder so ähnlich, kannst du selbst übernehmen).
Kurz und gut die einfachste Lösung ohne das Session Handling zu
verbiegen:
Beim erfolgreichen Login erzeugst du zwei Session Vars:
§_SESSION[login_korrekt]=boolean
§_SESSION[letzter_kontakt]=timstamp
Die Variable §_SESSION[letzter_kontakt] setzt du bei JEDEM Seitenaufruf
neu. VORHER prüfst du aber, ob $aktuelle_zeit minus §_SESSION[letzter_kontakt] eine von dir vorgegebene Zeit überschreitet.
Klar, das bei Zeitüberschreitung der Benutzer abgewiesen und die
Session dann gelöchst werden muss (session_stop() reicht da aus).
Warum ist das mit der Zeitüberschreitung wichtig? Das PHP System
zum löschen der alten Sessions ist von einigen Zufallsfaktoren
abhängig. Im Prinzip kann eine Session ewig leben wenn sie nicht
gelöscht wird ... und aus reiner Vorsicht ist es daher zu empfehlen,
in den Session Daten den Zeitpunkt der letzen Aktivität zu merken.
So long