Patrick: Session löschen

Beitrag lesen

Hi,

Ich schreibe gerade an einem Onlineshop, bei dem es keine Benutzerregistrierung/Login gibt. Wann also soll ich die erstellten Sessions löschen? Dem User ein "Session löschen" anbieten finde ich nicht sinnvoll.

Das ist eine gute Frage. Die Sessiondateien werden bei PHP parallel zu allen anderen Aktionen vom GC (Garbage Collector) eingesammelt = gelöscht. Dieser wird durch session_start() als Childprozess im Hintergrund angestoßen. Typisch nach 1440 Sekunden Nichtbenutzung der Sessiondatei.

Hmm das ist gar nicht gut, ich selber brauche ab und an länger als eine halbe Stunde um mir einen Warenkorb zusammenzustellen (wenn ich z.B. das Browserfenster ein paar Stunden offen lässe während ich mich irgendwo berate...). Wenn ich dann wiederkomm, würd ichs gar nicht schön finden, alles gelöscht vorzufinden (passiert aber nie).

Ein Kunde, der sich nicht bewusst logged hat, wird auch kein Verständnis für "Abmelden" aufbringen.

Eben

Zum zweiten: Was mache ich mit Kunden, bei denen Cookies deaktiviert sind (Browsereinstellungen oder Firewall)?

Das müsste sich dann schon um eine Applikation-Firewall handeln, die in den Strem der HTTP-Daten eingreift. Browser wehren sich schon öfter...

Ich habe gelesen, dass es zu unsicher sei, die Session-Id in der URL zu übergeben. Wieso? Es wird wohl kaum jemand eine schon bestehende Session_Id erraten können.

Doch theoretisch schon. je mehr Sessions laufen, desto leichter.  Aber finden kann er sie in Logs, per emial versandten Websites, etc.

Das heisst, ich unterstütze nunmal nur Kunden, die Cookies haben?

Man könnte durch vorheriges Versenden eines Cookies testen, ob dieser angenommen wird. Wen nicht, kann man den User darauf aufmerksam machen, dass das "Warenkorbsystem" (Cookies)  seines PCs nicht eingeschaltet ist.

Wie macht man das genau?

Man benötigt für einen Anonymous-Shop aber überhaupt keine Sessions, da man die Daten wunderbar per Post von einem zum nächsten Formular weitertragen kann.

-> Datenarray
  -> serialize()
  -> base64_encode()
  -> Hidden Field
  -> base64_decode()
  -> unserialize()
  -> Datenarray

Ist mir aber zu umständlich, bei jedem Link eine Javascript-Zeile hinzuzufügen, der den Submit eines Formulars mimt (was natürlich bei ausgeschalteten JS auch nicht gut ist ;)).

Wenn ich die URL-Unterstützung einbaue, wie kann ich die Anzahl Sessions in Grenzen halten/wann soll ich die bestehende Session löschen?

Die wird automatisch gelöscht.

S.o.
Wann wird denn die gelöscht? Ich möchte auf keinen Fall, dass die Sessions gelöscht werden, während sie theoretisch noch gebraucht werden (auch wenn sie vom User praktisch ein paar Stunden liegengelassen werden).

Als Beispiel: Jemand betritt die Startseite (wo noch keine PHPSESSID dabei ist), und der drückt einige Male auf "Refresh". Schon habe ich mehrere Sessions, die Ewigkeiten halten können. Bei einem sehr gut besuchten Onlineshop geht das schon ins gewicht.

Nein. Das passiert nur, wenn der Knabe keine Cookies annimmt.

Ich weiss, deswegen frage ich ja ;)

Und das testet man eben vorher.

Ok, bin überzeugt.

Vielen Dank!

Patrick