2013-08-22 24 views
6

Idealny sposób na przechowywanie informacji o produkcie w koszyku w asp.net

Tworzę aplikację e-commerce, w której mam koszyk.

Moja obecna struktura to, że użytkownik zapisuje produkt, umieszcza go w zestawach danych i datatable do sesji, więc dopóki sesja nie zostanie przekroczona, użytkownik może mieć listę, którą zapisał.

Jednak zwiększyłem limit czasu sesji do 600 minut (10 godzin), ale moim zmartwieniem jest to, że jest to najlepsze podejście do przechowywania informacji o koszyku, ponieważ jeśli powiedzą np. 1000 Użytkowników uzyskujących dostęp do witryny jednocześnie, nastąpi 1000 sesji obiekt utworzony na serwerze, nie pogorszy to wydajności mojej witryny.

Nie mogę zapisać go w bazie danych, ponieważ jeśli użytkownik jest anonimowy, nie mam wyjątkowej rzeczy o użytkowniku, w ten sposób, jeśli 1000 użytkowników uzyskuje dostęp do witryny, wszystkie produkty zostaną scalone, nie będę mógł pobrać produkt zapisany przez bieżącego użytkownika.

Czy istnieje inne lepsze podejście do tego problemu.

Odpowiedz

19

Nie powinieneś tego realizować. Sesje trwające 10 godzin są bardzo długie, jeśli masz 1000 użytkowników na swojej stronie, twój serwer będzie cierpieć i spowoduje pewne problemy z wydajnością.

W naszych witrynach e-commerce tworzymy plik cookie dla anonimowych użytkowników. Po wykonaniu tej czynności masz dwa rozwiązania:

  1. Store cały kosz w pliku cookie (zasadniczo listy z ID produktu + ilości, więcej w zależności od potrzeb/Strategy) lub innych technik (np localStorage).
  2. Przechowuj unikalny identyfikator w pliku cookie i przechowuj koszyk w bazie danych (tabela tymczasowa) z unikalnym identyfikatorem pliku cookie jako identyfikatorem. Gdy użytkownik zaloguje się do systemu, przeniesiesz te dane do tabeli koszyka użytkownika.

Możesz łatwo zmienić czas wygaśnięcia ciasteczek (lub go usunąć) bez wpływu na ogólną wydajność Twojego serwera. W przypadku identyfikatorów możesz użyć numeru Guid.NewGuid().

UPDATE:

Więcej szczegółów na temat mojego drugiego rozwiązania - scenariusz:

  1. Odwiedź stronę użytkownika
  2. utworzyć ciasteczka bez daty wygaśnięcia: cartId o wartości Guid.NewGuid() (nazwa i wartość do ciebie).
  3. użytkownik kliknij na „Kup”
  4. Pobierz plik cookie po stronie serwera i dodać cartId, produkt/ilość do „AnonymousBasket” stół
  5. Wyobraź użytkownik opuszcza witrynę i wrócić miesiąc później ciasteczko zostanie wciąż tu jesteś
  6. Jeśli anonimowy użytkownik przejdzie do swojego koszyka, możesz uzyskać jego produkty i ilości na podstawie wartości pliku cookie.
  7. Jeśli dziennik użytkownik Ci usunąć ciasteczka i przenieść dane z tabeli „AnonymousBasket” na „Koszyk”
  8. Teraz twój zalogowany użytkownik może przetwarzać do kasy

z tym rozwiązaniem wszystko jest utrwalane w bazie danych i nie wymaga sesji.Możesz zmienić wygasanie plików cookie, tak jak robisz to w sesjach, alternatywnie możesz wyczyścić tabelę tymczasową bez żadnego ryzyka lub utworzyć statystyki anonimowych użytkowników (dlaczego nie przystąpili do realizacji transakcji, ile średnio elementów, która pozycja,. ..).

+0

Witam @ glautrou, to może być dobre rozwiązanie, ale co jeśli ciasteczko zostanie wyłączone po stronie klienta. – Abbas

+0

Jeśli pliki cookie są wyłączone, sesje prawdopodobnie również zostaną wyłączone. Jeśli masz kłopot z wyłączonym JavaScriptem, możesz podać "Identyfikator koszyka" we wszystkich swoich adresach URL. To niezbyt przyjemne, ale w tym przypadku nie masz wielu możliwości wyboru. – glautrou

+0

Chyba pliki cookie są przechowywane po stronie klienta i sesje na serwerze, więc użytkownik nie może wyłączyć sesji z końca przeglądarki, ponieważ znajduje się ona na serwerze. – Abbas