Philipp Hasenfratz: Warenkorb mit Sessions anstatt mit MySQL

Beitrag lesen

Halihallo nochmals

OK, du Argumentator, mal sehen wie dir das gefällt: :-)))

Bei Sessions ist das ja etwas anders, wenn ich in dem Warenkorb-Script entsprechend den Eintrag in der Session vornehme, wird der neue Artikel ja erst nach Ende des Scriptes in der Session gespeichert, also ist dieses Produkt beim direkten Auslesen noch nicht dabei.

Was spricht gegen die Lösung, dass die Daten nicht in der Session, sondern in einer .txt Datei gespeichert werden und nur durch die Session "referenziert" wird? - Das wird an der Performance wenig ändern (wahrscheinlich macht das PHP sogar genauso), hätte aber folgenden Vorteil:

Die Daten sind jederzeit gleich "real-time", wie in der DB-Solution. Auch wenn du später mal den Warenkorbinhalt inspizieren möchtest (eventuell...), hättest du die Möglichkeit dazu. Das Warenkorb-Modul hätte auch im gleichen Script noch die Möglichkeit (ohne programmiertechnische Tricks) die Daten einzulesen.

Also, für jede neue Session/Besucher erstellst du einen eindeutigen Dateinamen (1.txt, 2.txt, ...), welcher die "Sessiondaten" bzw. die Warenkorb- und Produktdaten enthält. Die .txt - Datei hat folgendes, simples, aussehen:

name1=value1
name2=value2

also genauso, wie die Daten in der Session gespeichert sind (name-value-Paare). Selbstverständlich hält dich keiner davon ab auch ein XML-File mit den Daten zu erstellen (aber das wird die Performance dann wirklich etwas beeinträchtigen) :-)

Habt Ihr Erfahrungen wie ich das mit Sessions am besten mache?

Nein!!! :-))))))

  1. Frage: Was ist noch sinnvoll in der Session zu speichern?

Nein!!! :-))))))

Da jetzt ja nur die produktID in der Session steht, muß ich bei jedem Anzeigen(auf jeder Seite) die Datenbank erneut abfragen. Daher hatte ich auch schon dran gedacht, alle Daten zu einem Produkt in der Session zu speichern. Nur können das ein paar mehr Daten sein, ist das dann noch sinnvoll(schneller)?

Es hält dich niemand davon ab die ganze Datenbank in die Session zu spiegeln [sorry für diese alberne Anspielung, aber es hat mich grad so schön gereizt] :-))))

Also: Wenn du schon so performant sein willst: Es wäre unklug alle Produktdaten, welche im Warenkorb referenziert sind in die gleiche Session zu speichern; da dann mehrere Kunden über die genau gleichen Daten in der Session verfügen ( => Redundanz ). Wenn du die vorher genannte Lösung mit den .txt Dateien nimmst, könntest du das folgendermassen machen:

productID=15
count=27
...

wobei du in einem Verzeichnis /products
eine Datei 15.txt liegen hast, welche die Produktdaten enthält. Falls dann ein anderer Kunde dasselbe Produkt im Warenkorb hat, greifen beide auf dieselbe Datei zurück => Redundanz OK. Hier dürfte nur ein kleines Problem mit dem Datenabgleich aufkommen. Wenn ein Produkt-Record in der DB verändert wird, muss auch die entsprechende .txt Datei aktualisiert werden.

Viele Grüsse

Philipp

PS: Das Unperformante an einer Datenbank ist der Verbindungsaufbau, nicht die Query-Abfrage. Wenn du eine Verbindung im Progi offen hast, die sowieso gebraucht wird, ist der Performanceverlust wohl vorhanden, aber eher klein...