Sven Rautenberg: Sessionverwaltung und Authentifikation

Beitrag lesen

Moin!

in der offiziellen PHP-Doku steht leider nicht alles drin, was man sucht und die anderen scheinen nur mehr oder weniger sauber voneinander abzuschreiben und dabei entstehen dann öfter Fehler, meistens aufgrund der teilweise erheblichen Versionsunterscheide.

Dann halte dich nur an das offizielle Dokument und deren User-Anmerkungen. ;)

zu 1.)
auch PHP-Session-Cookies mit einer Lebensdauer > 0 werden nicht abgespeichert und auch nicht angezeigt. Das wird dann wohl an der zusätzlich mitgelieferten Cache-Strategie liegen??

Ich hab keine Ahnung. Aber das Cookie, was durch die Session gesetzt wird, ist keine schwarze Magie, sondern ein stinknormales Cookie, wie es von jedem anderen Mechanismus auch gesetzt werden kann. Es gibt schließlich nur eine Art von Cookies in HTTP. :)

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.

Das haben wir natürlich als Erstes getan.

Leider beantwotest Du meine Drage auch nicht. Ich würde gerne auf dem Client feststellen, ob der Browser Session-Cookies hält. Ist ja mein gutes Recht, festzustellen, welche fremden Daten mit (temporär) aufs Gerät gespeilt werden.

Mit Javascript gespeicherte Cookies abfragen? Das ist jedenfalls die einzige mir bekannte clientseitige Schnittstelle zu Cookies.

Schau in $_GET, $_POST und $_COOKIE nach, ob ein Schlüssel mit dem SessionID-Namen (gesetzt durch session_name() - default 'PHPSESSID') auftaucht.

Danke für den Tipp. Werde ich gleich kontrollieren, ob das stimmt.

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

Ein Kuddelmuddel haben wir jetzt schon, da jede PHP-Version seit 3.x hier erhebliche Unterschiede und teilweise auch heftige Bugs aufweist. Ich muss nun versuchen, einen einigermaßen durchgängigen Leitfaden seit Einführung der Sessions in PHP zu erstellen.

Wenn du _alle_ PHP-Versionen erschlagen willst, hast du in der Tat reichlich zu tun. Dir wird nicht entgangen sein, dass erst PHP 4 eigene Session-Funktionen mitbringt, während PHP 3 dazu noch die PHPLIB brauchte - von daher also einen grundsätzlichen Unterschied birgt.

Ansonsten hast du "nur noch" mit den Funktionen zu kämpfen, die erst nach und nach fehlerbereinigt oder überhaupt eingebaut wurden. Ich würde dieses Problem aber eher als geringer einschätzen, weil die Lösung dazu sich zumindest leicht dahersagt: Neueste PHP-Version einspielen und gut. ;)

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

<blockquote>
variables_order = "EGPCS" ; This directive describes the order in which PHP registers GET, POST, Cookie, Environment and Built-in variables (G, P, C, E & S respectively, often referred to as EGPCS or GPC). Registration is done from left to right, newer values overwrite older
</blockquote>

Soweit war ich schon. Ich bin nicht zu faul zu lesen ;-) Trotzdem ist jede ernsthafte konstruktive Kritik hilfreich.

Ähm, dein Zitat zielt vollkommen an meiner Äußerung vorbei. Die Session-Variablen (also die Werte, die weitergereicht werden sollen), sind nicht in EGCPS gespeichert, werden also von dieser Direktive absolut nicht berührt. Die Session-Variablen werden per default (du kannst eigene Mechanismen definieren) in einer Textdatei abgelegt und erst beim Befehl session_start() eingelesen und den Variablen wieder zugewiesen.

Beispiel: Wenn du eine Variable $counter hast, die als Session-Variable registriert ist und dort mit dem Wert 23 abgespeichert wurde, dann passiert sowas:

<?php

echo $count; // gibt den Defaultwert einer nicht-initialisierten Variablen aus (nichts)
$count = 5;
echo $count; // gibt 5 aus
session_start();
echo $count; // gibt 23 aus

?>

- Sven Rautenberg