Koszyk produktów - baza danych, sesja czy ciasteczko?

0

Mam do Was pytanko. Jak najlepiej zrobić koszyk produktów? Czy produkty z koszyka trzymać w sesji, ciasteczku czy w bazie danych? Dla zalogowanego uzytkownika to by nawet fajnie było, gdybym trzymał w bazie danych, ponieważ mógłby się wylogować i zalogować później nie tracąc produktów z koszyka.
A co z użytkownikami nie zalogowanymi?
Osobiście najlepszy sposób na koszyk to jest:
-dla zalogowanych użytkowników, koszyk trzymać w bazie danych
-dla niezalogowanych w ciasteczku.

A co myślicie również o trzymaniu produktów z koszyka w bazie dla niezalogowanych użytkowików poprzez zapis i późniejsze pobranie IP użytkownika? Ma to rację bytu?

PS. Nie jest to post, w którym żebram o kod lecz chodzi o wybór najepszego rozwiązania.

3

A co myślicie również o trzymaniu produktów z koszyka w bazie dla niezalogowanych użytkowików poprzez zapis i późniejsze pobranie IP użytkownika? Ma to rację bytu?

IP nie są unikalne więc to średni pomysł. Sąsiad z bloku mógłby zobaczyć co kupowałem? ;)

Już lepiej local storage jednak, tylko pamiętaj że cokolwiek jest client-side moze zostać zmodyfikowane przez użytkownika więc nie wrzucaj tam ceny, zniżki ani nic takiego, no i pamiętaj żeby przy wczytywaniu tych danych odpowiednio je whitelistować. Bo jeśli w ciastku oczekujesz id produktów w koszyku i potem ładujesz je na jana do zapytania do bazy, to zaręczam ci że któryś użyszkodnik zrobi tam jakieś 1'; drop database albo 1' union select password from users where username='admin ;)

0
Shalom napisał(a):

A co myślicie również o trzymaniu produktów z koszyka w bazie dla niezalogowanych użytkowików poprzez zapis i późniejsze pobranie IP użytkownika? Ma to rację bytu?

IP nie są unikalne więc to średni pomysł. Sąsiad z bloku mógłby zobaczyć co kupowałem? ;)

Już lepiej local storage jednak, tylko pamiętaj że cokolwiek jest client-side moze zostać zmodyfikowane przez użytkownika więc nie wrzucaj tam ceny, zniżki ani nic takiego, no i pamiętaj żeby przy wczytywaniu tych danych odpowiednio je whitelistować. Bo jeśli w ciastku oczekujesz id produktów w koszyku i potem ładujesz je na jana do zapytania do bazy, to zaręczam ci że któryś użyszkodnik zrobi tam jakieś 1'; drop database albo 1' union select password from users where username='admin ;)

Piszesz, "już lepiej", a jakibyłby najlepszy sposób i najbezpieczniejszy na zrobienie koszyka sklepowego?

0

No jeśli chcesz to trzymać lokalnie w sesji usera to cookie/local storage faktycznie, ale pomyśl o tym co tam chcesz trzymać i czy ewentualnie to jakoś podpisywać cyfrowo, jeśli będą tam jakieś wrażliwe dane. Najbezpieczniej oczywiście byłoby gdyby informacja była tylko na serwerze i jej modyfikacja możliwa tylko za pomocą odpowiedniego API, bo wtedy nie ma za bardzo pola na wrzucenie tam czegoś niebezpiecznego.

0

Najlepiej to oczywiście w bazie danych. Użytkownik niezalogowany ma w ciasteczku zapisane jakieś ID w stylu GUID. I ten numer jest powiązany z odpowiednimi rekordami w bazie.

0

Tylko co z niezalogowanymi? Przecież ceny nie mogę trzymać po stronie użytkownika. Nie wiem jak to rozwiązać.

0
Midnight napisał(a):

Tylko co z niezalogowanymi? Przecież ceny nie mogę trzymać po stronie użytkownika. Nie wiem jak to rozwiązać.

Przecież @Shalom Ci już odpisał że nie ma problemu z tym abyś korzystał nawet z tych ciasteczek trzymając tam np. ID produktu, pamiętając jedynie żeby potem przy wczytywaniu nie lecieć od razu po kolei ładując te IDki do bazy tylko je najpierw przetworzyć zabezpieczając się przed ewentualnymi niespodziankami od użytkownków.
Wystarczy Ci tylko ID na podstawie którego będziesz wiedział wszystko o produkcie i nie będzie potrzeby trzymania żadnej ceny, opisu innych takich.

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