Je m'occupe d'une boutique Magento avec 400-500 visiteurs et 40-50 commandes par jour. Récemment, le système a été mis à niveau de Magento EE 1.14.2.4 vers Magento EE 1.14.3.2 et j'ai remarqué quelques exceptions étranges dans les journaux:
exception 'Mage_Core_Model_Session_Exception' in
/var/www/.../app/code/core/Mage/Core/Model/Session/Abstract/Varien.php:418
Je cherchais cette exception et je sais qu'elle est déclenchée car le code de validation de session suivant ne parvient pas à valider la session:
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() ) {
Ce bloc if a été ajouté au fichier avec la dernière version de Magento. Et c'est apparemment un changement de freinage, voir plus de détails ci-dessous.
L'exception se produit assez souvent, comme une douzaine de fois par jour. mais je ne suis pas en mesure de recréer des conditions qui conduisent à l'exception, sauf si je mets littéralement vrai dans la condition ci-dessus. Les exceptions se produisent le plus souvent sur les pages de détails du produit et à la dernière étape de la vérification d'une page. La boutique est une boutique b2b, l'utilisateur doit être connecté pour voir la page du produit ou pour pouvoir commander, signifie que l'utilisateur est redirigé vers les pages de connexion lorsque la session est invalidée / expirée. Pour le moment, il est plus important pour moi de résoudre ce problème lors du paiement.
Que se passe-t-il du point de vue de l'utilisateur: l'utilisateur remplit le panier, passe à la caisse et atteint la dernière étape, puis il / elle clique sur le bouton "soumettre la commande" et rien ne se passe. Dans les coulisses, JS de Magento effectue une requête AJAX et JS s'attend à recevoir JSON en retour, mais si cette erreur se produit, le code HTML de la page de connexion est renvoyé, ce qui ne peut pas être analysé par JavaScript et ne fait rien. C'est super déroutant pour les utilisateurs.
Eh bien, ce n'est pas un scénario utilisateur complet, nous avons contacté les utilisateurs et ils nous ont dit qu'ils ont attendu quelques jours entre le remplissage du panier et la soumission de la commande, ce que cela signifie exactement est difficile à comprendre, car les gens ne s'en souviennent tout simplement pas.
Durée de vie de la session PHP - 350000 (~ 4 jours en secondes) Durée de vie du cookie - 345600 (4 jours)
Voici la vraie question: comment puis-je savoir quel type de comportement utilisateur conduit à l'exception?
MISE À JOUR Jusqu'à présent, je sais que l'exception se produit dans les classes suivantes en fonction de la demande faite, pour moi cela ne signifie malheureusement rien.
/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
MISE À JOUR 2 : les sessions sont stockées dans des fichiers et nettoyées par le garbage collector de la session PHP, que ce soit un bon choix ou non est hors de portée de cette question.