Hello,
die Sessions werden bei PHP mit eienr Session-ID geführt. Diese muss dem Client zu jeder Zeit bekannt sein, und es muss gewährleistet sein, dass er diese ID bei jedem Request auch an den Server wieder mitschickt. Wie Du schon richtig erkannt hast, funktioniert die sicherste Variante mit einem Cookie. Dieser wird aber per Cache-Anweisung üblicherweise nicht vom Browser auf der Platte gespeichert. In PHP signalisiert man das dadurch, dass man dem Cookie eine Haltbarkeitsdauer (Expire) von 0 gibt. Mit Ende der Browserinstanz verfällt dann auch der Cookie. Die PHP-Sessionverwaltung macht das automatisch so.
Der Verlust der Session bei zwischenzeitlichem Besuch "normaler" HTML-Seiten ist dadurch aber (nahezu) ausgeschlossen. Eine Abmeldung des Clients ist durch Zerstören des Cookies und ggf. Zerstören der Session mit sessionn_destroy() möglich.
Wenn keine Cookies gewünscht werden, kann man trans-sid = on benutzen und PHP dadurch anweisen, die Session-ID als hidden-Variable in jedem Formular und als Parameter an jedem Link anzuhängen. Das hat den Nachteil, dass die Session-ID auch sichtbar weitergereicht wird und, da sie in der URL steht, auch mit in Bookmarks und Logs gespeichert wird. Das bedeutet, dass sie sehr leicht zu finden (als Schlüssel) ist. Außerdem muss gewährleistet sein, dass Sessionseiten nur über Sessionseiten erreicht werden können. Das Zwischenschalten von "normalen" HTML-Seiten führt sonst zu Verlust der Sessioninformation. PHP würde dann beim Eintritt in eine Sessionseite eine neue Session starten.
Man kann Sessions aber auch selber aufbauen. PHP liefert dazu alle notwendigen Funktionen. Die Usererkennung findet dabei durch die Anmelde-Credentials USER:PASSWORD statt, die man sich über einen "auth401-Dialog" besorgt. Das ist das "normale" Anmeldefenster, dass auch von .htaccess benutzt wird.
Diese Daten sendet der Browser dann bei jedem Aufruf einer Seite aus dem Pfad innerhalb der Anmeldeseite mit. Dabei it es auch egal, ob dies nur eine "normale" HTML-Seite ist.
Die Sessiondaten kann man in einer Sessiondatei sichern. Die Sessionkennung muss man sich dann nach der Usererkennung aus einer Tabelle (Datei) holen. Das sichern der Daten am Ende des Scriptes kannst Du mit register_shutdown_script() und $daten=serialize($_SESSION) durchführen. Bei Start des Scriptes wird dann zuerst die Authentifizierung durchgeführt und dann die Daten aus der Sessiondatei mit $_SESSION=unserialize($daten) wieder hergestellt.
Leider ist bei diesem Verfahren keine Abmeldung des Clients vorgesehen. Es müssen zur Abmeldung alle Clientwindows geschlossen werden.
Grüße
Tom