Christian Schnagl: Reload-Button im Browser abfangen

Beitrag lesen

Hallo Stephan,

wie ich aus dem Thread entnehmen kann, geht es Dir um einen ONLINE-Shop.
Ich habe das ausschließlich mit CGI so gelöst:

Es gibt eine SUB mit folgendem Inhalt:

$browser=$ENV{'HTTP_USER_AGENT'};
  $ip=$ENV{'REMOTE_ADDR'};
  $fingerprint=$ip.$browser;
  $expire=time+10000;

Die Artikelnummer des Produktes, der Fingerprint und die Expire-Zeit ergeben zusammen einen Datensatz in der Warenkorb-Tabelle.

Die SUB identifiziert den Benutzer eindeutig, da die ip-Adresse nur einmal vorkommen kann. Wenn sich der Benutzer jetzt aber z.B. 2 Waren in den Warenkorb legt und sich abmeldet ohne zu bestellen, dann könnte folgendes passieren:

Ein anderer User, logt sich beim Provider ein und bekommt dynamisch genau die IP zugewiesen, die der vorherige Benutzer hatte. Dieser neue Benutzer geht auf Deine Seite und benutzt auch noch zufällig den gleichen Browser. Dann bekommt er einen bereits gefüllten Warenkorb angezeigt....

Wenn zwischen dem ersten Besuch und dem zweiten Besuch mehr als 10000 Sekunden (die Zeit kannst Du selbst festlegen...) liegen, dann fange ich das ab mit der $expire-Variable, die im Warenkorb zusätzlich mit abgelegt ist. (Niemand hält ca. 3 Stunden einen Warenkorb offen, um dann doch noch zu bestellen)

Natürlich entsteht dadurch Datenmüll und zwar genau die nicht bestellten aber bereits abgelaufenen Daten. Dies ist aber kein großes Problem. Wenn man es automatisieren möchte, dann kann man ja bei jedem Aufruf der Warenkorbfunktion alles löschen, was bereits abgelaufen ist.... Bei meiner mySQL-Datenbanke tritt hier eine nicht merkbare Zeitverzögerung (<1 sek) ein. Alternative: Man löscht selbst regelmäßig per Hand oder Script, daß händisch aufgerufen wird....

Ich hoffe, geholfen zu haben!
Gruß

Christian Schnagl
christian@schnagl.de

PS: Ich halte den oben geschilderten Fall für sehr unwahrscheinlich, so daß nichts gegen den Einsatz dieser Methode spricht. Wenn es eine bessere Lösung gibt, dann würde ich Sie hier gerne erfahren !!!