Moin!
session_unregister() ist out und sollte nicht mehr verwendet werden.
ist es überhaupt nötig, eine Session-Variable zu löschen, wenn man sofort danach session_destroy() aufruft?
Das vermag ich pauschal nicht zu beantworten.
Es ist nach meinem Dafürhalten unnötig, session_destroy() aufzurufen und/oder das Session-Cookie beim User zu löschen.
Annahme: Man verwendet den modernen Ansatz mittels $_SESSION, keine alten Methoden.
Begründung: Ein Löschen der Sessionvariablen über $_SESSION = array() ist mit dem Ende des Skriptes vollständig und wirksam. Jeglicher weiterer Request wird unweigerlich ein leeres Array vorfinden - eine Situation, die absolut identisch ist mit der, die man direkt nach dem Start einer neuen, bislang unbekannten Session vorfindet.
Dem User sein Session-Cookie zu entziehen ist unsinnig. Bei dem Cookie handelt es sich ja um eine eindeutige, auf die Zeit des Besuchs begrenzte Identifikation. Verläßt der Benutzer die Site und kommt später wieder, so ist es bei gelöschter Session-Variablen absolut uninteressant, ob dieser Benutzer nun dasselbe oder ein anderes neues Cookie kriegt. In beiden Fällen liegt wieder eine jungfräuliche Session ohne Vorbelegung vor. Die Garbage Collection von PHP, welche nach einem Zufallsfaktor mehr oder weniger regelmäßig zu alte Sessiondateien löscht, dient im Prinzip nur dazu, dass sich in diesem Verzeichnis nicht irgendwann Millionen von Dateien ansammeln - der Zugriff des Dateisystems würde dabei nämlich extrem verlangsamt werden.
Auch sollte man ja die Existenz einer Session nicht schon als Kriterium für "ich bin irgendwo eingeloggt" nehmen. Insofern muß es bei gut programmierten Projekten sogar egal sein, ob eine Session bereits existiert hat bzw. ein Session-Cookie übermittelt wurde, oder noch nicht.
Das Manual schreibt in seiner berühmt missverständlichen Art mal wieder nur Verwirrendes:
<cite>
session_destroy() löscht alle in Verbindung mit der aktuellen Session stehenden Daten.
Mit der Session zusammenhängende globale Variablen und das Session-Cookie werden nicht gelöscht.
</cite>
Der einzige Punkt, bei dem ich session_destroy() nachvollziehbar eingesetzt sehen könnte, wäre beim Aspekt der Gleichzeitigkeit gegeben. Es ist ja problemlos möglich, während der Laufzeit des ersten, sessionlöschenden Skriptes ein zweites aufzurufen. Dieses wird beim Start die noch ungelöschten Sessiondaten einlesen, während dessen Laufzeit wird dann die Session geleert (array() zugewiesen) und durch Skriptende des ersten Skriptes auch gespeichert, und dann erst ist das zweite Skript beendet und speichert den innerhalb dieses Skriptes kaum veränderten Zustand von $_SESSION wieder ab.
Dieses Problem existiert allerdings mit oder ohne session_destroy() genauso. Denn ob ich durch das zuerst gestartete Skript nun die Sessiondatei leere oder lösche, ist zum Zeitpunkt des zweiten Skriptendes wahrscheinlich ziemlich egal, weil die Sessiondatei entweder nur mit neuem Inhalt gefüllt oder komplett neu angelegt wird.
- Sven Rautenberg