Kiedy Magento korzysta z sesji, a kiedy z plików cookie?

9

Wiem, że Magento ma następujące podstawowe funkcje do obsługi sesji i plików cookie:

Mage::getSingleton('core/cookie');
Mage::getSingleton('core/session');

Kiedy Magento ustawia pliki cookie, a kiedy sesje PHP? Jakie są przypadki użycia?

Jestem trochę zdezorientowany, ponieważ wiem, że Magento przechowuje informacje o koszyku Mage::getSingleton('checkout/session')i status użytkownika Mage::getSingleton('customer/session'). Ale sesja kasy nie wydaje się sesją, ale ciasteczkiem. Ponieważ kiedy zamykam przeglądarkę i ponownie otwieram stronę, przedmioty są nadal w koszyku.

Czy to oznacza, że checkout/sessionmodel ustawia pliki cookie, a nie $_SESSIONzmienną globalną ?

Rouzbeh
źródło

Odpowiedzi:

14

Nie, oznacza to, że sesje są utrwalane za pomocą pliku cookie, który zawiera identyfikator sesji. Jedyną alternatywą w PHP jest parametr adresu URL, np. ?SID=d41d8cd98f00b204e9800998ecf8427eGdzie d41d8cd98f00b204e9800998ecf8427ejest identyfikator sesji.

Krótko mówiąc, dane sesji są przechowywane na serwerze, ale ponieważ HTTP jest bezstanowy, plik cookie lub parametr o identyfikatorze sesji jest niezbędny do zidentyfikowania właściwej sesji.

Magento ustawia dwa sesyjne pliki cookie, adminhtmldla backendu i frontendfrontendu. Modele sesji jak 'checkout/session'przechowują swoje dane w „przestrzeni nazw”, tj $_SESSION['checkout'].

Pliki cookie niezwiązane z sesją, które ustawia Magento, są na przykład storeciasteczkami, które zapamiętują, które przechowują widok aktualnie przeglądany.

Fabian Schmengler
źródło
0

Mage::getSingleton('checkout/session')Zapisuje wszystkie dane wybrane w Flatsprzykładzie tabel. sales_flat_quote sales_flat_quote_addressi więcej.

Co to jest: każdy klient przy pierwszej wizycie otrzymuje quote_idunikalną relację z danymi w innych quotetabelach i jest trwały, dlatego zawsze możesz zobaczyć swój koszyk. Te dane za każdym razem, gdy zmieniasz koszyk, dane i coś w formularzu płatności przed zakończeniem zamówienia. Po zakończeniu zamówienia wszystkie dane wyceny są pobierane i zapisywane w ordertabelach ep. sales_order_itemsa dane wyceny zostaną wyłączone. Dzieje się tak za każdym razem, gdy robisz i zamawiasz.

Mage::getSingleton('customer/session') ma twoje dane klienta, gdy jesteś zalogowany.


Mam nadzieję, że ma to dla ciebie sens. Można to łatwiej wyjaśnić, rozmawiając. Sposób, w jaki Magento zarządza jego danymi, jest złożony i naprawdę dobrze rozproszony, ale kiedy zrozumiesz, jak zarządza się danymi i jak nimi manipulować. Zrobiłeś to magiczne ciasto Esasy.


AKTUALIZACJA

w ten sposób można uzyskać quote_idsesję

   $session        = Mage::getSingleton('checkout/session');
   $quote_id       = $session->getQuoteId();
Duarte
źródło
Czy to jest quote_idzapisywane w sesji lub pliku cookie?
Rouzbeh
w sesji. Pliki cookie są mechanizmem przechowywania danych w zdalnej przeglądarce, a tym samym śledzenia lub identyfikacji powracających użytkowników.
Duarte
Właśnie tego nie rozumiem. Sesja wygasa po zamknięciu przeglądarki. Ale w jaki sposób Magento wciąż pamięta quote_idi tym samym koszykuje przedmioty podczas ponownego otwierania przeglądarki?
Rouzbeh
Sesja przechowuje twoje IP, a kiedy wrócisz Magento użyj go, aby zdobyć swój quote_idi Magic, możesz ponownie zobaczyć swój koszyk. Zalogowany i niezalogowany użytkownik ma quote_idwycenę Dane nie wygasają
Duarte
1
Ok, sprawdź to. 1) Niezalogowany: Dodałeś 3 produkty do Koszyka, a dane zostaną zapisane, sales_flat_quotejeśli usuniesz pliki cookie i pamięć podręczną. Twoje dane zostaną utracone, a Twój koszyk będzie pusty. Więc niezalogowani użytkownicy ich token opiera się na plikach cookie i pamięci podręcznej. 2) Zalogowano: Te same 3 produkty w koszyku. Wyczyścisz pliki cookie i pamięć podręczną przeglądarki. otrzymujesz wylogowanie, ale po zalogowaniu się 3 produkty nadal tam są. Cała ta magia jest zarządzana przezquote
Duarte