35 Stimmen

Einkaufswagen-Beständigkeit: $_SESSION oder Browser-Cookie?

Auf einer E-Commerce-Website ohne Benutzername/Anmeldung zur Speicherung von Warenkorbdaten wäre es besser, die PHP $_SESSION-Variable oder ein Browsercookie zu verwenden, um Artikel im Einkaufswagen zu behalten? Ich tendiere dazu, $_SESSION zu verwenden, da Cookies deaktiviert werden können, würde aber gerne Ihre Gedanken dazu hören.

Vielen Dank im Voraus für Ihre Überlegungen.

50voto

Xeoncross Punkte 53024

Auch nicht

Keine großen Websites würden es wagen, den Warenkorb eines Benutzers in einer Sitzung oder einem Cookie zu speichern - diese Daten sind einfach zu wertvoll.

Was Kunden kaufen, wenn sie Artikel auswählen, wie viele sie kaufen, warum sie den Bezahlvorgang nicht abschließen usw., sind alle sehr, sehr wichtig für Ihr Geschäft.

Verwenden Sie eine Datenbanktabelle, um diese Informationen zu speichern und verknüpfen Sie sie dann mit der Sitzung des Benutzers. Auf diese Weise verlieren Sie die Informationen nicht und können Statistiken über Benutzerkörbe erstellen oder Probleme mit Ihrem Bezahlvorgang lösen.

Protokollieren Sie alles, was Sie können.

Datenbankschema

Im Folgenden finden Sie ein vereinfachtes Beispiel dafür, wie dies auf Datenbankebene aussehen könnte.

benutzer {
    id
    email
}

produkt {
    id
    name
    preis
}

warenkorb {
    id
    produkt_id
    benutzer_id
    menge
    zeitstempel    (wann wurde es erstellt?)
    abgelaufen     (ist dieser Warenkorb noch aktiv?)
}

Sie möchten den Warenkorb möglicherweise auch in mehrere Tabellen aufteilen, um Änderungen am Warenkorb nachzuverfolgen.

Sitzungen

Normale PHP-Sitzungen bestehen aus zwei Teilen

  1. Die Daten (gespeichert in einer Datei auf dem Server)
  2. Ein eindeutiger Bezeichner, der dem Benutzeragenten (Browser) zugeordnet ist

Es geht also nicht um $_SESSION vs $_COOKIE - es geht um $_SESSION + $_COOKIE = "Sitzung". Es gibt jedoch Möglichkeiten, dies zu ändern, indem Sie ein einzelnes verschlüsseltes Cookie verwenden, das die Daten enthält (und daher nicht benötigen, um die Daten zu finden). Ein weiterer häufiger Ansatz besteht darin, die Daten in Memcached oder einer Datenbank anstelle des Dateisystems zu speichern, damit mehrere Server darauf zugreifen können.

Was @Travesty3 sagt, ist, dass Sie zwei Cookies haben können - eines für die Sitzung und ein anderes, das entweder ein "Angemeldet bleiben" Cookie (das länger als das Sitzungscookie existiert) ist oder eine Kopie der Daten in einem separaten Cookie.

9voto

MukeshD Punkte 151

Wie von Xeoncross hervorgehoben, ist es sehr wichtig, alle möglichen Informationen zur Analyse zu speichern. Man sollte also nicht ausschließlich auf Sitzungen und Cookies vertrauen.

Ein möglicher Ansatz ist -

Verwenden Sie Sitzungen, wenn nicht eingeloggt

Wenn der Benutzer nicht eingeloggt ist, können Sie die Warenkorbartikel und Wunschlisteitems von der Sitzung mithilfe von $_SESSION in PHP speichern und abrufen

Verwenden Sie die Datenbank, wenn eingeloggt

Wenn der Benutzer eingeloggt ist, können Sie eine der zwei Optionen in Betracht ziehen -

  • Speichern Sie den Warenkorbartikel oder Wunschlisteartikel nur in der Datenbank
  • Speichern Sie den Warenkorbartikel oder Wunschlisteartikel sowohl in der Datenbank als auch in der Sitzung (Dadurch sparen Sie einige Datenbankabfragen)

Wenn sich der Benutzer einloggt

Wenn sich der Benutzer einloggt, erhalten Sie alle Warenkorbartikel und Wunschlisteitems aus der Sitzung und speichern sie in der Datenbank.

Dadurch bleiben die Daten auch dann beständig, wenn sich der Benutzer ausloggt oder das Gerät wechselt. Solange der Benutzer jedoch nicht eingeloggt ist, gibt es keinen Weg, um die Informationen dauerhaft zu speichern, sodass sie nicht beständig sind.

Benötigte Daten abrufen

Immer wenn Sie auf den Warenkorb oder die Wunschliste zugreifen möchten, führen Sie folgende Überprüfung durch -

  • Wenn der Benutzer nicht eingeloggt ist, schauen Sie in die Sitzung
  • Wenn der Benutzer eingeloggt ist, führen Sie eine Datenbankabfrage durch, wenn Sie nur in der Datenbank speichern, sonst schauen Sie einfach in die Sitzung, wenn Sie die Sitzung zusammen mit der Datenbank aktualisieren

7voto

JvdBerg Punkte 21636

Ich würde es in einer SESSION speichern. Meine Wunschliste ist ziemlich lang, und ich befürchte, dass sie nicht in den 4K Speicherplatz passt, den ein COOKIE einnehmen kann. Es zwingt dich, die Session-Zeit auf einen längeren Zeitraum festzulegen.

Hinweis: In einigen Ländern (wie den Niederlanden, wo ich bin) gibt es sehr strenge Richtlinien bezüglich Cookies, und du könntest gesetzlich verpflichtet sein, Sessions zu verwenden.

4voto

Ricardo Souza Punkte 15402

Einige Punkte zur Hilfe:

Cookies:

  • Die Informationen bleiben bestehen, bis das Cookie abläuft (was von Ihnen konfiguriert werden kann);
  • Neigt dazu, die Kommunikation zwischen Server und Client zu verlangsamen, da es bei jedem Anfrage/Antwort-Austausch zwischen den beiden ausgetauscht werden muss;
  • Es handelt sich um eine unsichere Methode zur Speicherung von Daten und ist leicht abzuhören;
  • Sie haben auch eine Begrenzung zur Datenspeicherung.

Sitzung:

  • Alle Informationen werden auf dem Server gespeichert und daher nicht mit dem Client ausgetauscht.
  • Weil es nicht über das Netzwerk geteilt wird, ist es etwas sicherer;
  • Alle Informationen gehen verloren, wenn die Sitzung endet;
  • Bei einem Shared-Hosting können Probleme auftreten, wenn die Sitzung während eines Vorgangs aufgrund einer Überlastung der Ressourcen durch eine der auf demselben Server gehosteten Websites endet.

Ich würde persönlich mit Sitzungen gehen, da ich annehme, dass es sich um eine kleine / mittelgroße Benutzerseite handelt. Wenn es wächst, wäre es besser, eine einfache DB-Struktur zur Speicherung dieser Daten zu verwenden, mit einem Wartungsplan, um unnötige Daten zu löschen (z. B. Kunden, die einige Produkte auswählen, aber den Checkout nicht durchführen).

3voto

Travesty3 Punkte 14598

Sie könnten in Betracht ziehen, beides zu verwenden.

Der Nachteil von $_SESSION ist, dass die Sitzung gelöscht wird, wenn der Browser geschlossen wird.

Verwenden Sie Sitzungen, aber versuchen Sie, die $_SESSION-Daten aus einem Cookie zu füllen, wenn es verfügbar ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X