Warenkorb und Session

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Warenkorb und Session

    HiHo,

    ich arbeite gerade an einem Warenkorb und habe da ein Verständnis Problem mit Session bzw. mit deren Verwendung.
    Bis her habe ich da nur mit SQL und einem Cookie gearbeitet. Cookie Key wird mit den Produkten in der DB gespeichert.

    Im Bestellformular speicher ich also den Cookie Key, das Produkt, die ID, Preis und Timestamp in der DB und lese im Laufe des Bestellvorgangs alles anhand des Cookie aus.
    Da dies nicht so gerne gesehen wird auch wenn ich damit bissher keine Probleme hatte, will ich das nun auf Session ändern, stoße dabei aber auf 2-3 Probleme.


    Ich habe 5 Produkte, alle 5 Produkte haben jeweils noch mal verschiedene Kategorien.
    Als Beispiel.
    Der Punkt Webspace hat 8 Pakete
    Domains haben jeweils noch mal 200 Optionen (de,com,org etc.)
    Wie kann ich dies mit Session lösen?

    Meine Idee, ich habe eine Session Tabelle

    Quellcode

    1. CREATE TABLE IF NOT EXISTS `r789_sessions` (
    2. `session_id` char(64) COLLATE utf8_bin NOT NULL DEFAULT '0',
    3. `session_product_id` mediumint(8) NOT NULL DEFAULT '0',
    4. `session_product` varchar(40) COLLATE utf8_bin NOT NULL COMMENT '1 = Domain, 2 = Webspace, 3 = vServer, 4 = Cloud',
    5. `session_ip` varchar(40) COLLATE utf8_bin NOT NULL,
    6. `session_user_agent` varchar(255) COLLATE utf8_bin NOT NULL,
    7. `session_fid` mediumint(8) NOT NULL DEFAULT '0',
    8. `session_tid` mediumint(8) NOT NULL DEFAULT '0'
    9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


    und Speicher für jedes Produkt den Wert.
    session_id (evtl. noch im Cookie speichern zum wiedererkennen)
    session_product_id ist die ID des Porduktes
    session_product dort kommt dann rein ob es sich um eine Domain, Webspace oder anderes handelt
    etc.

    Das wäre jetzt meine Lösung. Wie würdet Ihr das lösen?
  • Bin mir nicht sicher, ob ich dich jetzt richtig verstanden habe, also korrigier mich, wenn ich falsch lieg.
    Ich seh den Grund nicht, warum du das in einer Datenbank speichern willst? Das geht ja gerade gegen die Logik von Sessions ;)

    Ich bau mir bei sowas immer gern ein mehrdimensionales Array und speicher das in der Session.
    Sprich bei dir könnte es dann z.B. so aussehen:

    PHP-Quellcode

    1. $_SESSION['products'] = array(
    2. [0] => array(
    3. 'product' => 'tolle Domain',
    4. 'category' => 'domain',
    5. 'random_id' => '123'
    6. ),
    7. [1] => array(
    8. 'product' => 'Webspace Flat',
    9. 'category' => 'webspace',
    10. 'random_id' => '34534'
    11. ),
    12. [2] => array(
    13. 'product' => 'Domain 300',
    14. 'category' => 'Domain',
    15. 'random_id' => '3253'
    16. )
    17. );
    Alles anzeigen


    PS: Um dem ganzen mehr Sicherheit zu geben würde ich übrigens überall nur Verweise auf die Datensätze in der Datenbank hinterlegen.
  • Airfrischung schrieb:

    Sowas gehört nicht in eine Datenbank, die bläht sonst zu schnell mit zu unnötigen Informationen voll.


    Datenbankbasierte Session-Systeme sind nicht abwegig. Nicht ohne Grund werden sie von den "großen Jungs", die Ahnung haben (Laravel, WCF, CI, ...) genutzt.
    • komplette Kontrolle
    • einfach erweiterbar
    • Sicherheit
    ... sprechen dafür. ;)
    Mit einem guten System wird die Datenbank überhaupt nicht unnötig gefüllt. Das Session-System macht bei komplexeren Anwendungen nur einen seeeeehr geringen Anteil aus. ;)

    Außerdem könnte man dich richtig ärgern, in dem man deine Seite einfach bombadiert. Dann mag dich dein Webserver und dein Datenbankserver nicht mehr.


    Wie meinst du das?



    Gruß
    Active Record
  • Wenn hier keine Kontrolle unternommen wird, und jeder Besucher (IP?) eine Session bekommt & was in den Warenkorb legt (& somit ein DB Eintrag erzeugt wird), dann kann man daraus schließen, dass hier Queries um die Gegend geschmissen werden. Ergo: wenn nicht nur ein Besucher auf deiner Website gerade ist, sondern 100000, dann braucht die Datenbank und der Webserver schon bissl power.
    Zudem wissen "die großen Jungs" auch wie man mit soetwas umgeht. Mit einem kleinen "bisschen PHP" da ran zu gehen, finde ich nicht so gut.