Moin!
Folgendes gitl für die Arebit mit "Session-Cookies":
SID ist immer dann definiert, wenn ein Session-StartVERSUCH stattgefunden hat. Wenn session_start() erfolgreich war, also mit einer bestehenden Session verbunden werden konnte, dann ist SID leer aber definiert. Steht in SID der Sessionstring, dann wurde die Session gerade eben neu gestartet.
Diese Aussage ist definitiv falsch.
SID ist dann gefüllt, wenn das Skript ohne per Cookie übermittelte Session-ID aufgerufen wurde. Punkt.
Dies ist typischerweise in zwei Situationen der Fall:
1. Das Skript wird von einem Browser das erste Mal aufgerufen. Dann wird eine neue Session-ID generiert, es wird versucht, diese als Cookie zu setzen, und sie wird in SID reingeschrieben und bei trans_sid auch automatisch an alle internen Links angehängt (solche, die nicht mit http beginnen).
2. Wenn der Browser Cookies nicht akzeptiert und folglich beim zweiten Request der Session nicht zurückschickt, wird die Session-ID anhand der URL-Information ermittelt, und die zugehörigen Daten gelesen. Alles weitere ist unter 1. beschrieben.
Wenn man nun session.tans_sid = on schaltet, wird einfach immer diese Konstante an alle Link angehängt und in alle Forms als Hidden-Variable eingebaut.
Nein, das ist so auch nicht ganz korrekt - aber nur in Details. :)
Detail 1: In Formularfelder wird SID nicht eingebaut. Wohl aber werden dort die Informationen der Session-ID eingebaut. Und zwar in der Form:
<input type="hidden" name="<?php echo session_name(); ?>" value="<?php echo session_id(); ?>">
Detail 2: Wenn man Links manuell mit SID bestücken muß, wird man typischerweise zu folgender Taktik greifen:
<a href="/link/seite.html?<?php echo SID; ?>">Link</a>
Dies führt bei leerer SID dazu, dass der Link auf ein Fragezeichen endet.
Bei automatischem Anhängen wird das Fragezeichen (oder ggf. das trennende &-Zeichen) ganz automatisch eingefügt, wenn es notwendig ist (weil SID existiert und Text enthält), ansonsten ersatzlos weggelassen.
Für das Funktionieren der Links ist das unbedeutend, aber es ist eben nicht ganz dasselbe. Und grundsätzlich kann man durch etwas mehr Programmieraufwand das automatische Verhalten von PHP auch manuell erzeugen.
- Sven Rautenberg
Die SelfHTML-Developer sagen Dankeschön für aktuell 15671,45 Euro Spendengelder!