mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 28.03.2024 21:59 Benutzername: Passwort: Auto-Login

Thema: PHP Session löschen; Variablen zwischen speichern vom 03.03.2014


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP Session löschen; Variablen zwischen speichern
Seite: 1, 2  Weiter
Autor Nachricht
LilaKartoffelbrei
Threadersteller

Dabei seit: 03.09.2013
Ort: -
Alter: 34
Geschlecht: Weiblich
Verfasst Mo 03.03.2014 12:34
Titel

PHP Session löschen; Variablen zwischen speichern

Antworten mit Zitat Zum Seitenanfang

Hallo ihr Lächel

Im Rahmen eines Schulprojekts gestalten wir einen kleinen Webshop. Der Warenkorb des Webshops soll dabei sowohl Gästen, als auch eingeloggten Personen zur Verfügung stehen. Das klappt soweit auch super. In einem Array wird die Artikelnummer der Objekte im Warenkorb gespeichert, in einem anderen die gewünschte Anzahl.

Nun soll der Warenkorb auch bestehen bleiben, nachdem sich ein User ausgeloggt hat. Die Session wird also gelöscht.

Wie kann ich die Daten zwischen speichern?

So sieht der Codeausschnitt aktuell aus
Code:

//Warenkorb abspeichern.
$nummern = array();
$nummern = $_SESSION['nummern'];
$stueck = array();
$stueck = $_SESSION['stueck'];

//Session zerstören
$_SESSION = array();
session_destroy();

//Warenkorb wiederherstellen
session_start();
$_SESSION['stueck'] = $stueck;
$_SESSION['nummern'] = $nummern;


Dieser Code geht aktuell jedoch nicht. Ich vermute es liegt daran, dass die Session mitten im Dokument gestartet wird und eigentlich muss die ja am Dokumentenanfang gestartet werden.

Nun habe ich ein großes Brett vor dem Kopf und weiß leider nicht, wie ich die Daten möglichst geschickt zwischen speichern kann. Für ein paar Schubser in die richtige Richtung wäre ich sehr dankbar Lächel

Liebe Grüße und Danke schon mal Lächel
  View user's profile Private Nachricht senden
qualidat

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Mo 03.03.2014 13:00
Titel

Antworten mit Zitat Zum Seitenanfang

Sessions sind nur gut, um während einer bestehenden Verbindung Variablen von einer Seite zur nächsten mitzschleppen.

Wenn du die Daten sichern willst, geht das z.B. über Cookies. Du schreibst die Daten mit dem Cookie-Code als Key in eine Datenbank oder mit dem Cookie-Code als Dateiname in eine lokale Datei (auf dem Server).

Beim Eintritt in den Shop wird geprüft, ob der Besucher schon mal da war (Cookie exisitert schon). Wenn ja, werden die evtl. hinterlegten Shopdaten anhand des (per PHP übermittelten) Cookie-Codes wieder geladen. Wenn nein, wird anhand irgendwelcher Merkmale (z.B. IP-Adresse und Uhrzeit/Datum oder einer Zufallszahl) ein entsprechender individueller Cookie erzeugt ...
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
LilaKartoffelbrei
Threadersteller

Dabei seit: 03.09.2013
Ort: -
Alter: 34
Geschlecht: Weiblich
Verfasst Mo 03.03.2014 13:08
Titel

Antworten mit Zitat Zum Seitenanfang

Die Idee mit den Cookies gefällt mir schon mal sehr gut Lächel

Da muss ich mich gleich mal in das Thema einlesen.

Die Idee auch einen alten Warenkorb aufzuheben, wenn ein User schon länger nicht mehr im Shop war oder ähnliches finde ich super! Auf das bin ich noch gar nicht gekommen.

Mir ging es bisher nur darum, dass User A eingeloggt ist und 3 Sachen im Warenkorb hat. Er loggt sich aus und die 3 Sachen bleiben drin. Jetzt kommt die Frau von User A und loggt sich ein und kann nun die 3 Sachen kaufen. Das war die Idee. Aber das sollte sich ja sicherlich auch per Cookie lösen lassen.

Vielen Dank für den Schubser in Richtung Cookies. Das hilft mir schon viel weiter Lächel
  View user's profile Private Nachricht senden
qualidat

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Mo 03.03.2014 13:11
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Mir ging es bisher nur darum, dass User A eingeloggt ist und 3 Sachen im Warenkorb hat. Er loggt sich aus und die 3 Sachen bleiben drin. Jetzt kommt die Frau von User A und loggt sich ein und kann nun die 3 Sachen kaufen. Das war die Idee. Aber das sollte sich ja sicherlich auch per Cookie lösen lassen.


Wenn du Benutzername und Passwort hast ("eigeloggt"), dann kannst du nat. auch die für den Zugriff auf Datei oder Datenbank nehmen. Das mit den Cookies war mehr für die nicht-registrierten Besucher gedacht. Manche Leute schalten Cookies ab oder löschen sie beim Beenden des Browsers, ausserdem haben die auch ein "Verfallsdatum" was man ihnen bei der Erstellung mitgibt ...


Zuletzt bearbeitet von qualidat am Mo 03.03.2014 13:12, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
LilaKartoffelbrei
Threadersteller

Dabei seit: 03.09.2013
Ort: -
Alter: 34
Geschlecht: Weiblich
Verfasst Mo 03.03.2014 13:19
Titel

Antworten mit Zitat Zum Seitenanfang

Ok. Ich erstelle dann also am besten eine weitere Tabelle für den Warenkorb mit einer ID für den Warenkorb, der Kundennummer, der Artikelnummer und der Anzahl des Objektes, richtig? Und die Sachen werden erst dann in die Datenbank geladen, wenn der User sich ausloggen will und damit die Session löscht?

Beim erneuten Einloggen wird dann überprüft ob der User noch einen Warenkorb hinterlegt hat? Beim Kaufen oder beim Löschen des Warenkorbs werden dann alle Einträge mit der entsprechenden Kundennummer gelöscht.

Klingt eigentlich nach einer guten Idee. Lächel

Das hilft mir aber leider nicht bei meinem Problem, dass beim Ausloggen (aber nicht dem Browser schließen) der Warenkorb dann für den Gast auch verfügbar bleiben soll. Also muss ich da wohl mit Cookies ran. Richtig? Beim Beenden des Browsers lasse ich das Cookie dann verfallen, da ja irgendwelche fremden Leute, die sich später an den PC hocken, keinen Einblick in den Warenkorb geben will.


Zuletzt bearbeitet von LilaKartoffelbrei am Mo 03.03.2014 13:28, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
remote

Dabei seit: 10.11.2006
Ort: /var/www/
Alter: 109
Geschlecht: Männlich
Verfasst Mo 03.03.2014 13:28
Titel

Antworten mit Zitat Zum Seitenanfang

1. Englisch ist Teil der Programmiersprache.
Deutsche Bezeichner für Variablen, Methoden etc. darf man sich gar nicht erst angewöhnen.
Nicht $stueck, sondern $item (oder passender: quantity).

2. Datenstruktur
Getrennte Arrays für Produkt-ID (product_id) und Quantität (quantity) zu verwenden ist in dem Fall nicht ungefährlich. Was passiert, wenn die Arrays versehentlich asynchron werden? Was z.B. wenn noch weitere Angaben, wie z.B. Preis bei Bestellung (um Änderungen anzuzeigen), Steuersätze etc mit aufgenommen werden? Wenn Du die zugehörige Information auf verschiedenste Variablen/Arrays verteilst, bekommst Du große Probleme alle sauber nachzuhalten.

Sicherer wäre es, jede Position komplett zu kapseln. Mehrdimensionale Arrays sind da das Stichwort.

Code:

$line_item = array('product_id' => 24, 'quantity' => 5);
$order[] = $line_item;


$order enthält dann ein Array mit allen Positionen des Warenkorbes, die wiederum als Array alle zugehörigen Informationen enthalten.


3. Warenkorb erhalten
Hier solltest Du realistisch testen und das Ausloggen und Speichern des Warenkorbs, sowie das Einloggen und Rekonstruieren des Warenkorbs mit 2 getrennten Anfragen lösen (Beides gleichzeitig macht überhaupt keinen Sinn).
Wie und wofür man Sessions verwenden kann (und wofür nicht) ist hier nachzulesen: http://tut.php-quake.net/de/sessions.html

Um Daten von einer Session in die nächste zu übernehmen, müssen diese Daten in weniger flüchtiger Form gesichert werden. Dazu gibt es mehrere Möglichkeiten. Entweder man legt die zu erhaltenden Daten in einer Datenbank ab und verknüpft Sie mit dem User. Bei der Anmeldung fragt man dann ab ob es für den User bereits einen Warenkorb gibt.

Soll der Warenkorb auch für anonyme Besucher wiederhergestellt werden, kann ein Cookie gesetzt werden. Entweder man geht vor wie beim User Login, nur dass man statt user_id eine eindeutige GUID in Cookie und Datenbank hinterlegt, oder man schreibt den kompletten Warenkorb direkt in das Cookie.

Mit obiger Datenstruktur brauchst Du nur das Array $order serialisieren und wegschreiben.
  View user's profile Private Nachricht senden
qualidat

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Mo 03.03.2014 13:31
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Ok. Ich erstelle dann also am besten eine weitere Tabelle für den Warenkorb mit einer ID für den Warenkorb, der Kundennummer, der Artikelnummer und der Anzahl des Objektes, richtig? Und die Sachen werden erst dann in die Datenbank geladen, wenn der User sich ausloggen will und damit die Session löscht?


Ich würde bei jedem Klick auf einen Artikel diesen sofort in die Datenbank übernehmen. Die Daten werden dann entweder durch das Kaufen gelöscht (oder besser den Artikeln ein anderer Status zugewiesen oder in eine andere Tabelle verschoben, so hat man eine History), oder einfach stehen gelassen. Wenn der Kunde mal wiederkommt, kann man ihn ja mit einem Dialog darauf hinweisen, dass da noch Sachen im Warenkorb liegen und fragen, was damit passieren soll (löschen, stehen lassen oder Warenkorb bearbeiten).

Wenn das nur ein Übungsprojekt ist, geht das so. Für einen echten Webshop wirds da schnell problematisch, denn es könnte sein, dass einzelne Artikel im Warenkorb inzwischen ausverkauft sind oder sich der Preis geändert hat. Kann man Alles ausparieren, wird aber immer komplizierter. Auf jeden Fall würde ich auch hier eine Art Verfallsdatum ansetzen, nach dessen Ablauf die Daten injedem Falle gelöscht werden.

Warum du den Cookie bereits beim Beenden des Browsers verfallen lassen willst, verstehe ich nicht. Geht ausserdem auch nicht, du weisst ja beim Erstellen noch nicht, wie lange der Kunde bleibt. Wenn der Cookie hinreichend individuell ist (lange Zufallszahl plus Uhrzeit und Datum), kann er doch einige Tage gültig bleiben. Der nächste Kunde hat ja defininitiv einen anderen Code ...
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
LilaKartoffelbrei
Threadersteller

Dabei seit: 03.09.2013
Ort: -
Alter: 34
Geschlecht: Weiblich
Verfasst Mo 03.03.2014 13:39
Titel

Antworten mit Zitat Zum Seitenanfang

Danke für deine ausführliche Antwort Lächel

zu 1. ok also alles in Englisch. Das werde ich jetzt bei dem Projekt wohl nicht mehr ändern, da wir zu mehreren daran arbeiten und ich befürchte, dass dies zu großer Verwirrung sorgen würde. Für das nächste Projekt merke ich mir das auf jeden Fall vor. Außerdem geb ich dem Lehrer noch einen Wink diesbezüglich. Seine Variablen waren bisher nämlich immer auf Deutsch Grins

zu 2. Mehrdimensionale Arrays höre ich gerade zum ersten Mal. Klingt aber super! Mich nervt es auch total, dass es zwei Arrays sind und ich hab immer Angst, dass sie irgendwann mal nicht mehr passen. Weitere Angaben sollen eigentlich nicht in die Arrays, denn die könnten ja jederzeit aus der Datenbank abgefragt werden, da man ja die ID (Artikelnummer) hat. Dennoch werde ich das auf jeden Fall mit Mehrdimensionalen Arrays lösen, da dies wesentlich sauberer klingt. Vielen Dank Lächel

zu 3. Prima, dann müsste ich ja nur eine Variable zwischenspeichern in einem Cookie. Das klingt wunderbar.

Vielen Dank Lächel

Edit:
qualidat hat dazwischen gepostet

Die Sachen direkt in die Datenbank zu speichern klingt gut. Ebenfalls finde ich die Idee mit der Meldung, dass sich noch Sachen im Warenkorb befinden sehr gut!

Ich glaube bei der Cookieproblematik reden wir ein wenig aneinander vorbei. Ich wollte nur den Warenkorb zwischen speichern, damit er beim Ausloggen nicht gelöscht wird. Da er ja jetzt eh in eine Datenbank übertragen wird, ist dies doch eigentlich hinfällig. Ob ich den Warenkorb uneingeloggter Personen auch speichern soll, da bin ich mir unsicher. Eigentlich war das vom Projekt her nicht so gedacht. Werde mich da aber diesbezüglich auch noch mit meiner Projektpartnerin besprechen.

Danke Lächel


Zuletzt bearbeitet von LilaKartoffelbrei am Mo 03.03.2014 13:44, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden
 
Ähnliche Themen [PHP] Session-Variablen werden im IE nicht gespeichert
[Director 8]Variablen in (txt)Datei Speichern
Photoshop CS5 - Aktionen mit variablen Dateinamen speichern?
User- und Session-ID per Cookie, Session oder in URL durchre
session id?
PHP-SESSION aktualisieren ?
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.