Opiekuję się sklepem Magento z 400-500 odwiedzających i 40-50 zamówień dziennie. Ostatnio system został zaktualizowany z Magento EE 1.14.2.4 do Magento EE 1.14.3.2 i zauważyłem dziwne wyjątki w logach:
exception 'Mage_Core_Model_Session_Exception' in
/var/www/.../app/code/core/Mage/Core/Model/Session/Abstract/Varien.php:418
Goniłem ten wyjątek i wiem, że jest on uruchamiany, ponieważ następujący kod sprawdzania poprawności sesji nie sprawdza poprawności sesji:
class Mage_Core_Model_Session_Abstract_Varien extends Varien_Object
{
// ...
protected function _validate()
{
// ...
if ($this->useValidateSessionExpire()
&& isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
&& $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] < time() ) {
Ten if-block został dodany do pliku z najnowszą wersją Magento. I to najwyraźniej zmiana hamowania, zobacz więcej szczegółów poniżej.
Wyjątek zdarza się dość często, kilkanaście razy dziennie. ale nie jestem w stanie odtworzyć warunków, które prowadzą do wyjątku, chyba że dosłownie spełnię powyższy warunek. Wyjątki najczęściej występują na stronach ze szczegółowymi informacjami o produkcie i na ostatnim etapie realizacji jednej strony. Sklep jest sklepem b2b, użytkownik musi być zalogowany, aby zobaczyć stronę produktu lub aby móc dokonać zakupu, oznacza to, że użytkownik zostaje przekierowany na strony logowania, gdy sesja zostanie unieważniona / wygasła. W tej chwili ważniejsze jest dla mnie rozwiązanie tego problemu podczas realizacji transakcji.
Co dzieje się z perspektywy użytkownika: Użytkownik wypełnia koszyk, przechodzi do kasy i osiąga ostatni krok, a następnie naciska przycisk „Prześlij zamówienie” i nic się nie dzieje. Za kulisami JS Magento wykonuje żądanie AJAX i JS spodziewa się otrzymać JSON z powrotem, ale jeśli ten błąd się zdarzy, zostanie zwrócony kod HTML strony logowania, który nie może zostać przeanalizowany przez JavaScript i po prostu nic nie robi. To jest bardzo mylące dla użytkowników.
Cóż, to nie jest kompletny scenariusz dla użytkowników, skontaktowaliśmy się z użytkownikami i powiedzieli nam, że czekali kilka dni między wypełnieniem koszyka a złożeniem zamówienia, co dokładnie oznacza, że trudno to zrozumieć, ponieważ ludzie po prostu tego nie pamiętają.
Żywotność sesji PHP - 350000 (~ 4 dni w sekundach) Żywotność plików cookie - 345600 (4 dni)
Oto aktualne pytanie: jak mogę dowiedzieć się, jakie zachowanie użytkownika prowadzi do wyjątku?
AKTUALIZACJA Jak dotąd wiem, że ten wyjątek zdarza się w następnych klasach zgodnie z otrzymanym żądaniem, co dla mnie nie znaczy nic.
/catalogsearch/result/?q=… Mage_Core_Model_Session
/checkout/cart/ Mage_Core_Model_Session
/checkout/onepage/saveOrder/… Mage_Rss_Model_Session
/customer/account/loginPost/ Mage_Core_Model_Session
/customer/account/loginPost/ Mage_Reports_Model_Session
/customer/account/logout/ Mage_Reports_Model_Session
/catalog/product/view/… Mage_Reports_Model_Session
/catalog/product/view/… Mage_Tag_Model_Session
AKTUALIZACJA 2 : sesje są przechowywane w plikach i czyszczone przez moduł czyszczący sesje PHP, niezależnie od tego, czy jest to dobry wybór, czy nie, nie wchodzi w zakres tego pytania.