Session-Ende bestimmen / Warenkorb löschen
o.net
- php
0 Tom0 o.net0 ziegenmelker0 dedlfix0 Tom
Hallo,
folgende Sache, ich habe einen Warenkorb der über eine mySQL Datenbank läuft. Nun möchte ich, dass wenn ein Benutzer die Seite verlässt bzw. seine Session "zu Ende" ist, diese Einträge gelöscht werden. Dies soll also nicht gleich passieren, wenn der Browser geschlossen ist.
Gibts sowas wie ein Event, der checkt wenn die Session zu Ende ist und somit dann die Waren löschen kann?
Ole
Hello,
dieser "Event" müsste dann auf dem Server stattfinden.
Da Du vermutlich mit HTTP arbeitest, gibt es (ohne Vergewaltigung) kein Ereignis, dass das Ende einer Session kennzeichnet.
Außerdem hat das Ende der Session nichts mit dem Ende der Warenkorbnutzung zu tun.
Bsp1:
Ich wohne auf dem Berg. Bei starkem Schneefall oder Eis föllt manchmal der Strom aus. Die "Verbidnung" zum Server bricht also zusammen. Wenn der Strom dann 15 Minuten später wieder da ist, möchte ich gerne weiter bestellen.
Bsp2:
Ich sitze am Schreibtisch und bestelle gerade Weihnachtsgeschenke für meine Tochter. Da kommt sie zufällig ins Zimmer. Ich Schließe den Browser. Die Sessionvariable geht dadurch verloren.
Wenn meine Tochter wieder gegangen ist, möcht ich gerne weiterbestellen.
Ein Warenkorb sollte immer durch die Benutzerhandlung gelöscht werden.
Benutzer sollten sich grundsätzlich VOR der Benutzung authentifizieren, das halte ich einfach für fairer gegenüber dem Verbraucher. Die Nutzung wird damit zu einer bewussten Handlung (_nach_ den Belehrungen) und außerdem kann ich personalisierte Rabatte verwenden.
Warenkörbe gehören daher auch nicht in relativ flüchtige Sessiondateien, sondern in eine persistente Datenhaltung.
Sollten bei der nächsten Anmeldung noch angefangene Bestellungen vorliegen, frage ich den User, ob ich sie löschen soll, ob er eine weitere Bestellung anfangen will oder die vorhandene fortsetzen.
DAS ist dann der "Event" der die Daten freigeben sollte.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Danke für die prompte Hilfe,
ich hätte halt schon gerne dass man schon Waren in den Korb legen kann, ohne dass man sich vorher eingeloggt oder registriert hat.
Den Warenkorb mit dem Benutzer zu verknüpfen und eben nur den Benutzer manuell löschen zu lassen wäre halt dann nicht so wirklich möglich.
Der Shop beinhaltet nicht so viele Artikel, um die 100, und wird wohl auch nicht so extrem frequentiert werden, weshalb ich mir schon gedacht hab die Einträge dann eben mit phpadmin manuell rauszulöschen, aber das ist wohl wirklich nicht deluxe :)
Hallo,
Der Shop beinhaltet nicht so viele Artikel, um die 100, und wird wohl auch nicht so extrem frequentiert werden, weshalb ich mir schon gedacht hab die Einträge dann eben mit phpadmin manuell rauszulöschen, aber das ist wohl wirklich nicht deluxe :)
du kannst auch bei jedem Aufruf des Shops eine Datenbankabfrage nach 'abgelaufenen' Warenkörben machen. Voraussetzung ist, daß du die sessions in einer Tabelle mit Startzeit mitloggst und diese mit den Warenkörben verknüpfst, oder in der Warenkorbtabelle einen Erstellungszeitpunk mitführst. Gerade wenn der Shop nicht so oft besucht wird, ist dieser Overhead zu verschmerzen.
cu,
ziegenmelker
Danke für die prompte Hilfe,
ich hätte halt schon gerne dass man schon Waren in den Korb legen kann, ohne dass man sich vorher eingeloggt oder registriert hat.
Den Warenkorb mit dem Benutzer zu verknüpfen und eben nur den Benutzer manuell löschen zu lassen wäre halt dann nicht so wirklich möglich.
Dann kombiniere doch Toms Datenbank-Vorgehensweise mit einer Datenspeicherung per Session für unangemeldete User. Wenn der sich dann doch anmeldet kannst du ihn ja fragen, ob er das Zeug zum Datenbank-Warenkorb hinzufügen möchte oder was auch immer.
Der Shop beinhaltet nicht so viele Artikel, um die 100, und wird wohl auch nicht so extrem frequentiert werden, weshalb ich mir schon gedacht hab die Einträge dann eben mit phpadmin manuell rauszulöschen, aber das ist wohl wirklich nicht deluxe :)
Deluxe ist ein Aufruf eines solchen Garbage Collection Scripts per cronjob...
Hello,
Dann kombiniere doch Toms Datenbank-Vorgehensweise mit einer Datenspeicherung per Session für unangemeldete User. Wenn der sich dann doch anmeldet kannst du ihn ja fragen, ob er das Zeug zum Datenbank-Warenkorb hinzufügen möchte oder was auch immer.
Ich habe für einen anderen Anwendungsfall etwas ähnliches programmiert.
Dabei geht es um Konfigurationen von werksseitig gefertigten Variantenprodukten, die von Handwerkern durchgeführt werden können, um diese dann anschließend ihren eigenen Kunden anzubieten.
Hier gibt es also Identifikationsprobleme in mehreren Freiheitsgraden
Man muss sich nicht anmelden, dann hat man aber nur solange Zugriff auf die gerade durchgeführten (mehreren) Varianten, wie man seine Session nicht abbricht.
Wenn man sich innerhalb der Session anmeldet, werden die durchgeführten Konfigurationen in das Kundenkonto übernommen und stehen auch beim nächsten Besuch wieder zur Verfügung.
Wenn man es lässt, fängt man eben wieder von vorne an.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom