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.

2voto

batfastad Punkte 1915

Ich würde eine Sitzung verwenden. Wenn ein Benutzer Cookies deaktiviert hat, kann die Sitzung nicht gestartet werden, da die Sitzungs-ID auf dem Rechner des Benutzers in einem Cookie gespeichert ist.

Es gibt einige Einstellungen, die Sie möglicherweise überprüfen möchten, um zu versuchen, die Sitzungen länger zu halten.

  • Verhindern Sie, dass das Sitzungscookie gelöscht wird, wenn der Benutzer seinen Browser schließt, indem Sie session_set_cookie_params() mit dem Parameter lifetime ausführen. Diese Funktion muss vor session_start() ausgeführt werden.

  • Sie können auch die Häufigkeit ändern, mit der Sitzungen vom Server gelöscht werden, indem Sie die Einstellungen für die Sitzungsmüllsammlung session.gc_probability, session.gc_divisor, session.gc_maxlifetime entweder in der php.ini ändern oder ini_set() verwenden.

  • Wenn auf dem Server andere Websites ausgeführt werden und Sie die oben genannten Einstellungen für die Müllsammlung ändern, müssen Sie diese in der php.ini festlegen, damit sie für alle Websites gelten. Oder wenn Sie ini_set() verwenden, können Sie auch erwägen, diese Sitzungen in einem anderen Verzeichnis als anderen Websites zu speichern, indem Sie session_save_path() ändern. Auch dies wird vor session_start() ausgeführt. Dadurch wird verhindert, dass die Müllsammlung anderer Websites Ihre erweiterten Sitzungen für eine bestimmte Site löscht.

  • Ich würde auch empfehlen, die folgenden Sitzungseinstellungen in der php.ini festzulegen session.entropy_file = /dev/urandom, session.entropy_length = 256, session.hash_function = sha512. Das sollte Ihnen eine kryptografisch starke Sitzungs-ID mit einer extrem geringen Kollisionswahrscheinlichkeit geben.

  • Und stellen Sie sicher, dass Sie ein SSL-Zertifikat auf Ihrer Website haben, um Man-in-the-Middle-Angriffe gegen Ihre Sitzungs-ID zu verhindern.

Natürlich könnte ein Benutzer immer noch alle Cookies manuell löschen, was auch das Sitzungs-ID-Cookie löschen würde, aber das ist ein Risiko, das ich eingehen würde. Wenn ich mich in einem Warenkorbsystem befände und nicht ausgecheckt hätte, würde ich nicht meine Cookies löschen gehen. Ich bin immer noch der Meinung, dass Sitzungen besser sind als einfach nur Cookies zu verwenden.

Die Daten sind sicher genug, solange nur die Website Zugriff auf Ihr Sitzungsverzeichnis hat und Ihre Sitzungs-ID stark ist. Und durch die Verlängerung der Speicherzeit des Servers für Sitzungen können Ihre Daten auf dem Server bestehen bleiben.

Sie könnten weitere Maßnahmen ergreifen, um Ihre Sitzungen noch sicherer zu machen. Erneuern Sie Ihre Sitzungs-ID alle 20 Minuten, indem Sie die Daten kopieren. Protokollieren Sie auch Sitzungs-IDs gegen IP-Adressen in einer Datenbank und prüfen Sie, ob eine bestimmte IP-Adresse versucht, mehr als X Anzahl von Sitzungs-IDs in einer bestimmten Zeit zu senden, um zu verhindern, dass jemand versucht, eine Sitzungs-ID bruteforce.

Sie könnten auch die Daten in einer Datenbank speichern, die mit der Sitzungs-ID verknüpft ist, anstatt sie in einer Sitzungsdatei auf dem Server zu speichern. Dies hängt jedoch immer noch von einer Sitzungs-ID ab, die in einem Cookie gespeichert ist und jederzeit verschwinden könnte. Der einzige Weg, um sicher zu sein, dass ein Benutzer seinen Warenkorb nicht verliert, ist die Anmeldung zuerst und die Speicherung in einer Datenbank.

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