Koszyk oparty o sesje

0

Panowie.

Ma ktoś jakiś generalny zarys koszyka opartego na sesji? Piszę coś własnego ale nie działa to zbyt fajnie.

Jak sie za to zabrac? Jak zapisać kolekcję obiektów w sesji i zeby np sesja wyagsala po 2 godzinach?

Macie może jakieś pomysły którymi chcielibyście się podzielić?

0

Zrobiłem sobie jakiś taki ViewModel dla koszyka z kilkoma potrzenymi polami

 
 ShoppingCartViewModel scvm = new ShoppingCartViewModel()
            {
                CartId = Guid.NewGuid(),
                ProductName = productName,
                Quantity = ilosc,
                AmountToPay = kwotaDoZaplaty,
                AddToCartDate = dataDodaniaDoKoszyka,
                UserName = dodanoDlaUzytkownika
            };

Wiem, że ogólnie zapisuje się w sesji np tak

 
Session["zawartoscKoszyka"] = allProductsInCart;

Potem zawartość sesji przekazuję sobie do widoku:

 
return View((List<ShoppingCartViewModel>)Session["zawartoscKoszyka"]);

Z tym, że przekazuje sobie ten produkt i jego ilość z widoku do akcji kontrolera, tam sobie cos licze, potem wyswietlam w widoku ten mój ViewModel ale jak z tego wyjde to nagle ten widok jest pusty. Nie wiem jak zapisać to tam na dłuższy czas.

0

Czy lepiej może przechowywać sobie produkty w koszuku w osobnej tabeli bazy danych? Podobno local storage też dobrze się sprawuje.

0

Moim zdaniem lepiej przechowywać to w bazie danych.
Co do czasu: po prostu zapisz czas dodania do bazy danych, następnie sprawdzasz przy pobieraniu danych czy czas jest <2h i jeśli tak no to wszystko jest OK. Po skończonych zakupach czyścisz tabelę.

0
Odyn napisał(a):

Jak zapisać kolekcję obiektów w sesji i zeby np sesja wyagsala po 2 godzinach?

Wpisz w web.config:

<sessionState timeout="120"  />
Odyn napisał(a):

Z tym, że przekazuje sobie ten produkt i jego ilość z widoku do akcji kontrolera, tam sobie cos licze, potem wyswietlam w widoku ten mój ViewModel ale jak z tego wyjde to nagle ten widok jest pusty. Nie wiem jak zapisać to tam na dłuższy czas.

Może kasujesz te dane z sesji, może nie umiesz ich pobrać, coś na pewno robisz źle.

ne0 napisał(a):

Po skończonych zakupach czyścisz tabelę.

A co, jeśli zakupy nie zostaną zakończone? Tabela będzie rosła w nieskończoność?

0
ne0 napisał(a):

Po skończonych zakupach czyścisz tabelę.

A co, jeśli zakupy nie zostaną zakończone? Tabela będzie rosła w nieskończoność?</quote>

Jakiegoś job-a założyć na tabelę żeby czyściło po pewnym czasie.

0

Ja bym to w session_end kasował.

0

Zastanawiam się jak zrobić to na samej sesji bez bazy danych. Jak to zrobić?

1
  1. Wstawić dane do sesji.
  2. Odczytać dane z sesji.
  3. Profit.
0

Ok zrobiłem już to właśnie. Cały koszyk oparłem na sesjii i działa bardzo fajnie :)

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