phpbar.de logo

Mailinglisten-Archive

[php] Umbau: Session-ID aus URL in Cookie stecken - Fragen zum ersten Folgeaufruf der Seite

[php] Umbau: Session-ID aus URL in Cookie stecken - Fragen zum ersten Folgeaufruf der Seite

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Mit Sep 22 13:21:50 CEST 2004


Hi Tim,

Tim Hildebrandt schrieb:
>> Grundsaetzlich sehe ich es aber so, dass eine Session nur
>> gestartet werden sollte, wenn es wirklich noetig ist, vor
>> allem in oeffentlich zugaenglichen Bereichen, wo auch keine
>> individualisierten bzw. personalisierten Inhalte (Bsp.
>> Warenkorb) angezeigt werden.
>
> Jein. Wir brauchen die Sitzungsdaten grundsätzlich sofort.

ok.


> Das ist aber
> auch nicht das eigentliche Problem. Wir haben genug Kapazität, um jeden
> Zugriff zu protokollieren.

Darum ging es mir auch nicht. Ich meinte nur, dass ein Verzicht auf die
Session, wo sie nicht wirklich erforderlich ist, Dein Problem ein Stueck
weit minimieren wuerde.

Koennte eine Suchmaschine Eure Website denn auch ohne Session sinnvoll
indizieren? Wenn ja, dann waere doch die Alternativloesung, die ich
skizziert hatte, die Umgebungsvariable HTTP_USER_AGENT abfragen und bei
Suchmaschinenbesuchen keine Session zu starten, eine Moeglichkeit, Dein
Problem einigermassen in den Griff zu kriegen.


> Wichtig ist, dass die Funktion
> "setcookie" in PHP nur dann "false" zurück gibt, wenn der Browser den
> Cookie
> technisch nicht akzeptiert. Sprich wenn der Benutzer die Cookie-Verwaltung
> explizit ausgeschaltet hat. Für diesen Fall ist meine Systemreaktion so
> vorgesehen, dass die Sitzungsinformation in der URL platziert wird.
>
> Problematisch ist ein Sonderfall: Die Funktion "setcookie" gibt "true"
> zurück (sprich: Der Browser kann Cookies technisch entgegen nehmen) aber
> der
> Benutzer hat die Cookie-Verwaltung auf "Eingabeaufforderung" gestellt und
> wird gefragt, ob der korrekt entgegengenommene Cookie (!) repräsentiert
> werden soll oder nicht. Dann und nur dann, wenn der Benutzer *nein*
> antwortet, geht mir die Sitzung flöten. Und genau dann habe ich das
> Problem,
> die zuvor ja bereits geöffnete Sitzung im System irgendwie aufgrund
> anderer
> Merkmale wieder zu finden...

Ich habe die Funktion setcookie() anders verstanden. Sie liefert immer
dann TRUE zurueck, wenn die Funktion fehlerfrei ausgefuehrt werden konnte.
Sie liefert FALSE zurueck, wenn dies nicht der Fall ist, z.B. weil zuvor
in der Datei schon Ausgaben erfolgt sind. Woher soll die Funktion auf dem
Server auch wissen, ob der Browser auf dem Client den Cookie akzeptieren
wird?

Du kannst auch nie in der Seite, die einen neuen Cookie setzt oder einen
bereits existierenden modifiziert, den neu gesetzten Cookie bzw. den neuen
Wert des bereits existierenden Cookies auslesen. Das geht erst auf der
Folgeseite.

Du musst also vermutlich Deine Pruefung, ob der Cookie existiert,
modifizieren.


> Und hier setzt meine Frage an, ob jemand hier in der Liste darüber schon
> mal
> nachgedacht hat und vielleicht eine Lösung hat...

Ob die Session verloren geht bzw. nicht dauerhaft zustande kommt, wenn der
Client den Cookie nicht akzeptiert, haengt von Deiner PHP-Konfiguration
ab. Wenn PHP die Session-ID alternativ auch an die URL anhaengen darf,
geht sie nicht verloren, wenn der Cookie nicht gesetzt werden kann. In
diesem Fall musst Du nur an bestimmten Stellen dafuer sorgen, dass die
Session-ID in den Seiten sauber in den URLs mittransportiert wird, z.B.
klassischerweise wenn Du ein

header('Location: ...');

einbaust.

Dein Kernproblem ist aber, dass die Suchmaschinen bei URLs, die
Session-IDs enthalten, Schwierigkeiten machen. Also komme ich damit wieder
zu meinen beiden Vorschlagen, die ich in meiner ersten Mail zu diesem
Thema gemacht habe.

Wenn Du von diesen beiden Vorschlaegen den ersten, die Session erst zu
starten, wenn es wirklich sein muss, ausschliesst, was haeltst Du denn von
dem zweiten, den HTTP_USER_AGENT abzufragen und wenn sie darin eine
Suchmaschine zu erkennen gibt, die Session nicht zu starten?


Viele Gruesse

Lutz


php::bar PHP Wiki   -   Listenarchive