SESSIONS an URL? Was bringt das?

F

Flunster

Hallo,

ich wollte mal wissen wozu man die Session ID an jede URL auf einer Seite dranhängt? Wie wird dann die übergebene Session initialisiert? Geht das automatisch? Woher weiss mein Skript, dass das ne Session ID ist was ich übergebe?

Reicht es nicht wenn ich auf jeder Seite einfach nur session_start() mache?
Oder sperr ich somit irgendwelche User aus, die zum Beispiel keine Cookies akzeptieren? Aber ich denke mir, die Session-Dateien werden sowieso serverseitig gespeichert! Wenn ich in den Session irgendwelche Variablen speichere werden doch auch keine Cookies benötigt oder?

Fragen über Fragen.....:-)


Mfg

Flunster
 
Die Session-ID wird standartmäßig beim Client als Cookie gespeichert.
Sicherheitshalber geben einige Systeme die Session-ID noch per URL-Parameter mit, wenn das Cookie nicht besteht oder es so eingestellt ist.
Würde das nicht passieren, wenn Cookies deaktiviert sind, kann das Script nicht mehr entscheiden, welche Session dem Client zugewiesen wurde und macht deshalb wieder eine neue.

Ich würde folgendermaßen vogehen:
  • Hänge die Session-ID einfach immer an.
  • Sollte die Variable $_COOKIE[session_name()] der Wert session_id() enthalten, kannst du den Parameter wieder raus nehmen...

Folgender Code (nicht getestet) müsste den gewünschten Erfolg bringen.
Du musst jetzt nur jede URL über diese Funktion durchlaufen lassen...
PHP:
function session_anhaengen($url) {
	if ($_COOKIE[session_name()] == session_id()) {
		return $url;
	} else {
		$z = (strstr($url, "?")) ? "&" : "?";
		return $url.$z.session_name()."=".session_id();
	}
}

Alternative Möglichkeit wäre ein Apache- oder PHP-Modul, dass die Session-ID an jeden Link hängt. Ich weiß aber nicht mehr wie das heißt.
 
dieses modul heisst session.use_trans_sid und ist in der php.ini zu finden.
wenn man root zugriff auf seinen server/webspace hat, dann ist dies eine sinnvolle funktion. :)

die session wird dabei automatisch in der form von session_name()=session_id() - also z.b. PHPSESSID=ugit76szug764wugw4zgsg4tu4g37euz89 - an jeden internen link gehängt, wenn kein session cookie gesetzt werden konnte.
 
Alternativ könntest du auch folgendes benutzen:

PHP:
ini_set("session.use_trans_sid", "1");

Sollte dein Provider diese Funktion blokiert haben, kannst du den Wert nicht ändern.
So wären die vorhergehenden Lösungen besser.

@codie_schaf

So wie du es geschrieben hast, wird die session ID immer an den Link angehängt, da session_id() immer die aktuelle ID zurückgibt.
Die Konstante SID dagegen ist leer, wenn ein cookie gesetzt wurde.

mfg

Devil
 
Devil Noxx:
So wie du es geschrieben hast, wird die session ID immer an den Link angehängt, da session_id() immer die aktuelle ID zurückgibt.

wenn man an jeden link selber &session_name()=session_id() ranhängt, ja... :)

wenn aber use_trans_id aktiviert ist und ein cookie gesetzt werden konnte, dann verzichtet php (zumindest auf meinen beiden servern) auf ein anhängen der ganzen geschichte.
 
Devil Noxx hat gesagt.:
Alternativ könntest du auch folgendes benutzen:

PHP:
ini_set("session.use_trans_sid", "1");

Sollte dein Provider diese Funktion blokiert haben, kannst du den Wert nicht ändern.
So wären die vorhergehenden Lösungen besser.

geht erst am php5 soweit ich weiss. ob der provider das sperren kann weiss ich nicht, glaube aber eher nicht
 
RealScorp hat gesagt.:
geht erst am php5 soweit ich weiss. ob der provider das sperren kann weiss ich nicht, glaube aber eher nicht

Da hast du wohl recht, ist zwar in der Dokumentation so beschrieben, dass es eigentlich in PHP4 gehen sollte.
Leider ist dies aber nicht der Fall. :mad:
 
Zurück