SessionID - Speicherung in Cookie, Weitergabe über URL oder Speicherung in Datenbank
-
Bestellung -> DB
Warenkorb -> Session
UserID zur Erkennung zum autom. Einloggen -> CookieIch würde das circa so aufbauen.
Bestellung muss persistent sein und dann auch zB von SAP oder sonstwas übernommen werden (das muss wohl eine DB sein).
Warenkorb kann nach 2h auch wieder gelöscht werden (also am besten Session, da sich die alleine löschen nach einer gewissen Zeit).
Wenn der User autom. eingeloggt werden will dann musst du ihn erkennen also muss etwas beim Client liegen -> Cookie.
MfG SideWinder
-
Wenigstens sind wir einer Meinung
MfG SideWinder
-
nur das Cookies _alleine_ blödsinn sind: zusätzlich noch per GEt/POST wenn Cookie nicht geht.
-
Die Datenbanken für meinen Webshop stehen, Eingabe von Daten, Ausgabe, löschen von Datensätzen etc. kein Problem. PHP auch kein Problem. Doch ich scheitere noch immer an Folgendem: Ein Kunde klickt an, dass er beispielsweise Produkt 7 kaufen will (es handelt sich um Bücher). Dann kann der Besucher der Seite wieder auf die Startseite des Webshops zurück gehen, geht danach wieder auf die Einkaufseite, kauft ein anderes Buch ein, löscht eines wieder usw.
Doch wie merke ich mir, wenn er die Einkaufseite verlassen hat, was er bestellt hat, die Eingaben sollen dafür nicht verloren gehen. Ich könnte alles in einer Datenbank zwischenspeichern, das würde funktionieren. Der Weg ist aber nicth der richtige, oder? Arbeitet man dafür mit den Sessions?
-
Ja ich würde in diesem Fall auf jeden Fall mit Sessions arbeiten. Das bedeutet du rufst auf jeder Seite als erstes gleich mal "session_start()" auf. Brauchst du da beim Rest Hilfe?
MfG SideWinder
-
Ich weiß nicht ob man das so machen soll, ich habe bisher immer so gearbeitet:
Ich erstelle auf der Startseite ein Kundenobjekt.
Auf jeder Seite rufe ich natürlich session_start() auf.
Drückt der Kunde "Artikel in den Warenkorb" bekommt das Array "Artikel" seines Kundenobjekts einen Artikel dazu (ID und Anzahl speichern).
Geht der Kunde in den Warenkorb brauchst du nur noch mit foreach das Array durchgehen.
Hat er "Bestellen" gedrückt speicherst du seine Daten in der Table der Datenbank indem alle Bestellungen sind (die kann man dann per Webinterface bzw. sicherer per SAP, etc. auslesen).
Die meisten Sessions leben ca. eine Stunde - ich würde seinen Warenkorb etwas länger leben lassen, 12h oder so. Das kann man ja angeben.
Problem: Was tun wenn der User nicht über die Startseite gekommen ist bzw. wieder zur Startseite zurück geht? Ganz einfach: Es muss jedes mal geprüft werden ob schon ein Kundenobjekt vorhanden ist in der Session (also direkt nach start_session()).
Ist in PHP sehr einfach mit is_object, etc. zu prüfen. Falls dies nicht der Fall ist kannst du eines erstellen. Fertig.
Weiß nicht ob man das auch einsetzen darf - aber bisher funktioniert es ganz gut :).
MfG SideWinder
-
Tips: Wenn man sich bei dir Einloggen kann (also Usersystem) kannst du dem Kundenobjekt noch Variablen wie Name, Adresse, etc. also alles was du benötigst hinzufügen.
Dann muss er seine Daten nicht eingeben weil du sie schon gespeichert hast. Sind sie hingegen leer kannst du ihn die Daten eingeben lassen. Das heißt, dass zwar der Warenkorb gelöscht wird da das Kundenobjekt gelöscht wird.
Aber die Daten speicherst du bei Änderungen raus in deine Kundentabelle und hast sie sofort wieder beim nächsten Besuch parat.
Automatisches Einloggen dann über Cookies&DB. Also das Cookie identifiziert deinen User (keine Sorge die ID ist verschlüsselt). Und du rufst in der DB ab wie der Kunde heißt, etc. und kannst das Kundenobjekt nach diesen Wünschen gleich aufbauen.
Nicht vergessen: In der DB kannst du Daten über den Kunden sammeln, zB was er zuletzt bestellt hat. Nach diesen Kriterien suchst du Artikel für seine persönliche Startseite (siehe zB Amazon).
MfG SideWinder
-
Danke für die ausführliche Antwort!
-
äh, ich habe noch immer eine Session-Frage (das verfolgt mich). Folgender Code wirft folgende Fehlermeldung raus:
Code:<html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <title>Ausgabe der gesamten Tabelle</title> <!--esi localhost="http://localhost/dummy/"--> </head> <body> <?php session_start(); $name = session_name(); echo $name, "<br>"; $kdnr = 101; session_register("kdnr"); echo $kdnr, "<br>"; ?> </body> </html>
Fehlermeldung:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at C:\Programme\Apache Group\Apache2\htdocs\dummy\1.php:8) in C:\Programme\Apache Group\Apache2\htdocs\dummy\1.php on line 9 Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\Programme\Apache Group\Apache2\htdocs\dummy\1.php:8) in C:\Programme\Apache Group\Apache2\htdocs\dummy\1.php on line 9 PHPSESSID 101
Die Ergebnisse werden also ausgegeben, aber die Fehlermeldungen sind da. Sicher ganz einfach zu vermeiden.
Innerhalb des Verzeichnisses, in dem der obige php-Code steht, habe ich ein Verzeichnis tmp mit dem Unterverzeichnis sess angelegt, sonst wären es weit mehr Fehler.
In der php.ini steht in der Session-Sektion Folgendes:[Session] session.save_handler = files session.save_path = /tmp session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = /
-
Wie gesagt du musst session_start() als erstes aufrufen (ich mach das sogar noch vor der DOCTYPE-Angabe). Cookies (die Sessions intern verwenden) müssen gesendet werden bevor die Header gesendet werden (also noch bevor <head>).
Im Body ist es schon zu spät.
BTW: Du hast keine DOCTYPE-Angabe ;).
MfG SideWinder
-
Es läuft, danke SideWinder
Ich wusste nicht, dass es GANZ nach oben muss!
-
Benötigt man immer ein tmp-Verzeichnis auf der obersten Ebene? Egal, ob ich Cookies abschalte oder nicht, wenn das tmp nicht existiert, hagelt es mir Fehlermeldungen um die Ohren.
-
Also auf meinem Server war von Anfang an ein tmp-Verzeichnis auf der höchsten Ebene, ich dachte auch, dass das gleich erstellt wird beim Installieren. Also JA man benötigt es, da in diesem Verzeichnis die Session-Daten verwaltet werden.
session.save_path = /tmp
Hast du ja selbst schon gepostet :D, natürlich kannst du das Verzeichnis auch ändern. Nicht empfehlenswert ist auf jeden Fall diese Daten im html-Verzeichnis zu speichern da sie dort aufrufbar sind.
MfG SideWinder
-
Danke!!!