Mi occupo di un negozio Magento con 400-500 visitatori e 40-50 ordini al giorno. Recentemente il sistema è stato aggiornato da Magento EE 1.14.2.4 a Magento EE 1.14.3.2 e ho notato alcune strane eccezioni nei log:
exception 'Mage_Core_Model_Session_Exception' in
/var/www/.../app/code/core/Mage/Core/Model/Session/Abstract/Varien.php:418
Stavo inseguendo quell'eccezione e so che è stata attivata perché il seguente codice di convalida della sessione non riesce a convalidare la sessione:
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() ) {
Questo if-block è stato aggiunto al file con l'ultima versione di Magento. E questo è apparentemente un cambiamento di frenata, vedi più dettagli sotto.
L'eccezione si verifica abbastanza spesso, come una dozzina di volte al giorno. ma non sono in grado di ricreare condizioni che portano all'eccezione, a meno che non metta letteralmente vero nella condizione sopra. Le eccezioni si verificano più spesso nelle pagine dei dettagli del prodotto e nell'ultimo passaggio di una pagina di verifica. Il negozio è un negozio b2b, l'utente deve accedere per vedere la pagina del prodotto o per poter effettuare il checkout, significa che l'utente viene reindirizzato alle pagine di accesso quando la sessione è invalidata / scaduta. Al momento è più importante per me risolvere questo problema durante il checkout.
Cosa succede dal punto di vista dell'utente: l'utente riempie il carrello, procede al checkout e raggiunge l'ultimo passaggio, quindi preme il pulsante "invia l'ordine" e non succede nulla. Dietro le quinte Magento JS esegue una richiesta AJAX e JS prevede di ricevere nuovamente JSON, ma se si verifica questo errore viene restituito l'HTML della pagina di accesso, che non può essere analizzato da JavaScript e non fa proprio nulla. Questo è super confuso per gli utenti.
Bene, questo non è uno scenario utente completo, abbiamo contattato gli utenti e ci hanno detto che hanno aspettato alcuni giorni tra il riempimento del carrello e l'invio dell'ordine, ciò che significa esattamente è difficile da capire, perché le persone semplicemente non lo ricordano.
Durata della sessione PHP - 350000 (~ 4 giorni in secondi) Durata dei cookie - 345600 (4 giorni)
Ecco la vera domanda: come posso scoprire quale tipo di comportamento dell'utente porta all'eccezione?
AGGIORNAMENTO Finora so che l'eccezione si verifica nelle seguenti classi in base alla richiesta fatta, per me questo purtroppo non significa nulla.
/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
AGGIORNAMENTO 2 : le sessioni vengono archiviate in file e ripulite dal garbage collector di sessioni PHP, indipendentemente dal fatto che questa sia una buona scelta o meno, non rientra nell'ambito di questa domanda.