Sven Rautenberg: Sessionverwaltung und Authentifikation

Beitrag lesen

Moin!

nachdem wir uns nun zwei Tage zu Dritt mit den Sessions in PHP, aber vor allem mit den schlechten und teilweise widersprüchlichen Dokumentationen rumgeschlagen haben, haben wir einigermaßen Überblick erhalten. Wir sind nun dabei, eine eigene Doku zu erstellen, damit die teilweise leider nur empirisch ermittelten Zusammenhänge nicht wieder versickern. Ich habe gerade das Inhaltsverzeichnis geschrieben und bin auf mehr als 30 Überschriften ersten Grades gekommen. Es dürften also so ca. 100 bis 150 Seiten werden.

Ich konnte bislang nicht feststellen, dass die PHP-Doku, die ich verwende, irgendwelche Widersprüche enthält - insbesondere der Session-Teil ist eigentlich recht simpel.

1.) Es gibt scheinbar Unterschiede zwischen einem "Session-Cookie" und einem "normalen" Cookie. Wie bilden die sich in der System-Programmierung oder im HTTP-Protokoll ab?

Die Unterschiede sind wirklich nur scheinbar. Ein Session-Cookie ist keine PHP-Spezialität, sondern ein Cookie, welches beim Beenden der Browser-_Session_ gelöscht wird - im Gegensatz zu persistenten Cookies, die eine Haltbarkeitsdauer mit auf den Weg bekommen haben. Sowas ist für ein Session-Management grundsätzlich eine gute Idee, denn ansonsten könnten andere Benutzer die Session auf dem gleichen Rechner einfach übernehmen.

2.) Wie kann ich einen solchen Session-Cookie auf der Workstation feststellen und auslesen? Gibt es Tools?

Willst du wissen, was drinsteht? Die Session-ID steht drin - erkennbar an den Daten, die PHP wieder vom Browser zurückkriegt, indem man $_COOKIES anguckt. Da $_COOKIES keinen direkten Bezug zur Session hat, sondern alle Cookie-Daten aus dem HTTP-Request wiedergibt, dürfte diese Information doch wohl ausreichend sein, oder? Ansonsten guck dir den HTTP-Verkehr an, am besten mit Michael Schröpls HTTP-Trace: http://www.schroepl.net/cgi-bin/http_trace.pl. Wie anderweitig schon angemerkt, gibt es für Session-Cookies keine Notwendigkeit zur Speicherung auf nichtflüchtigen Datenträgern, weil sie mit Beenden des Browsers ohnehin wieder gelöscht werden.

3.) Welche offiziellen Möglichkeiten gibt es festzustellen, ob eine Session besteht? Wir haben nur die Auswerung der Konstante SID finden können.

Schau in $_GET, $_POST und $_COOKIE nach, ob ein Schlüssel mit dem SessionID-Namen (gesetzt durch session_name() - default 'PHPSESSID') auftaucht. Wenn ja, besteht wohl eine Session - zumindest hat der Client von der vorhergehenden Seite dann eine Session-ID mitgebracht. Und PHP wird durch den Befehl session_start() nach gespeicherten Session-Informationen basierend auf diesen übermittelten Daten suchen.

4.) Gibt es eine Möglichkeit, ein session_register() direkt auf einzelen der $HTTP_POST_VARS auzuüben?

Damit würdest du vermutlich ein heftiges Kuddelmuddel erzeugen. Kopiere die für dich interessanten POST-Werte in eine Variable und registriere die in der Session. Denn bei der nächsten Seite könnte wieder ein POST-Request kommen und die Werte sich gegenseitig überschreiben.

Bemerke: Erst der Befehl session_start() schreibt die in der Session gespeicherten Werte in ihre zugehörigen Variablen. Vorher hast du nichts.

- Sven Rautenberg