Koszyk - sesja czy baza

0

Witam. Chciałem Państwa poprosić o opinie na temat dodawania produktów do koszyka. Warto to wykonywać w sesji czy poprzez dodawanie id produktu do bazy?

Pytanie powstało przez to, że sesja ma ograniczoną ilość znaków oraz 'żywotność'. Jak ktoś doda do sesji dużo produktów, to nie pomieści tego, oraz jak wejdzie za marę miesięcy do sklepu, to już tych produktów w koszyku miał nie będzie.

1

Po co Ci trzymać elementy w koszyku przez kilka miechów?

0

To co opisujesz przypomina mi bardziej listę życzeń i jak najbardziej powinna być zapisywana w bazie. Koszyk natomiast to tymczasowy zbiór produktów, na które ktoś się zdecyduje i kupi za kilka minut, albo się rozmyśli i nie kupi wcale. To, że nie zniknie mu to po wygaśnięciu sesji tego nie zmieni, a może jedynie irytować, bo będzie musiał pokasować je ręcznie jeśli będzie chciał kupić teraz inne produkty. To jest według mnie intuicyjne podejście i z tym modelem spotkałem się w praktycznie każdym sklepie, z którego usług korzystałem.

Przejrzałem na szybko SO pod kątem ograniczeń wielkości sesji w PHP i nie widziałem, by miała jakieś limity, więc nie wiem za bardzo o co chodzi :P

1

Jeżeli koszyk jest dostępny bez logowania - sesja. W przeciwnym wypadku - baza. Uzasadnienie jest proste. Użytkownik będzie oczekiwał, że produkty z koszyka mu nie znikną jeżeli zaloguje się z innego komputera.

0

Zależy wszystko co chcesz uzyskać bo jak zauważył Lectre, być może Ci chodzi o coś w rodzaju listy życzeń.
Tak samo myślę też, że rzeczy dodane raz do koszyka nie powinny tam być wiecznie bo od tego właśnie są listy życzeń. Jeżeli chcesz rozmyślać na zestawem produktów w koszyku tygodniami, raz z pracy, raz z domu to powinno się zaimplementować coś w rodzaju 'zapisz koszyk' co zresztą można nieraz spotkać na różnych stronach.

Dodatkowo mylisz chyba pojęcia SESSION a COOKIES.

0

Chodzi Mi o koszyk dostępny tylko po zalogowaniu się. Do kasowania go można wykorzystać jakiegoś CRONa przecież, który będzie usuwał produkty z koszyka co na przykład godzinę

0

I rozumiem, że jeśli dodam coś do koszyka minutę przed globalnym kasowaniem to tyle widziałem mój produkt, który szukałem przez ostatnie 15 minut? ;)

0

Baza a dlaczego?

Co w przypadku gdy będziesz miał serwis rozsiany na kilka serwerów, musisz sesje przenieść do bazy, po co pchać informację do sesji która i tak już będzie obciążona, skoro możesz listę produktów pobrać tylko na żądanie z koszyka?

Analizowanie zachowania klientów. Każdy sklep chce wiedzieć co ludzie robią na jego sklepie, tak nawet jak sesja usera przepadnie wiesz jakie produkty były w koszyku dla jakiej sesji i wiesz co dodawano co usuwano itp) z punktu widzenia biznesowego to bardzo ważne info.

0

Nie pomyślałem o tym ;p Na pewno można napisać jakąś funkcję, która będzie resetowała produkt 15min po dodaniu do niego produktu.

1

Co w przypadku gdy będziesz miał serwis rozsiany na kilka serwerów, musisz sesje przenieść do bazy, po co pchać informację do sesji która i tak już będzie obciążona, skoro możesz listę produktów pobrać tylko na żądanie z koszyka?

No błagam, kolega buduje prosty sklepik, a ty wyskakujesz tutaj z rozproszoną aplikacją, w dodatku zakładając, że będzie jedna instancja bazy danych? Chyba, że miałeś na myśli rozproszony model bazy typu Cassandra, ale znów, to nie ta klasa problemu.

Natomiast co do zapisu w bazie w celu analizy, faktycznie dobry pomysł, nie wpadłem na to :)

1

Skoro chcesz resetować koszyk 15 min po ostatniej aktywności to jednak może zostaniemy przy sesji + zapisywanie koszyka na własne żądanie do bazy dopiero jeżeli ktoś ma taką ochotę?:P

0

Trzymasz w sesji, w razie co "zapamiętaj mój koszyk". dopiero potem zamówienie zapisujesz do bazy. Ograniczenia sesja nie ma. Ograniaczenie ma plik cookie ale ty nie musisz się nim przejmować.

Hint: sesje można tez trzymać w bazie i wyciągać pewne dane ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1