Я слежу за магазином Magento с 400-500 посетителями и 40-50 заказами в день. Недавно система была обновлена с Magento EE 1.14.2.4 до Magento EE 1.14.3.2, и я заметил некоторые странные исключения в журналах:
exception 'Mage_Core_Model_Session_Exception' in
/var/www/.../app/code/core/Mage/Core/Model/Session/Abstract/Varien.php:418
Я преследовал это исключение, и я знаю, что оно запускается, потому что следующий код проверки сеанса не в состоянии проверить сеанс:
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() ) {
Этот if-блок был добавлен в файл с последним выпуском от Magento. И это, по-видимому, тормозное изменение, подробности см. Ниже.
Исключение происходит довольно часто, например, дюжина раз в день. но я не могу воссоздать условия, которые приводят к исключению, если я буквально не верю в условие выше. Исключения чаще всего встречаются на страницах с описанием товара и на последнем этапе оформления одной страницы. Магазин является магазином b2b, пользователь должен войти в систему, чтобы увидеть страницу продукта или иметь возможность оформить заказ. Это означает, что пользователь перенаправляется на страницы входа в систему, когда сеанс аннулирован / истек срок действия. На данный момент для меня важнее исправить эту проблему во время оформления заказа.
Что происходит с точки зрения пользователя: пользователь заполняет корзину, переходит к оформлению заказа и достигает последнего шага, затем нажимает кнопку «отправить заказ», и ничего не происходит. За кулисами JS Magento выполняет запрос AJAX, и JS ожидает получить JSON обратно, но в случае возникновения этой ошибки возвращается HTML-код страницы входа, который не может быть проанализирован JavaScript, и он просто ничего не делает. Это очень запутанно для пользователей.
Ну, это не полный пользовательский сценарий, мы связались с пользователями, и они сказали нам, что они ждали несколько дней между заполнением корзины и отправкой заказа, что это точно означает, что трудно понять, потому что люди просто не помнят этого.
Время жизни сессии PHP - 350000 (~ 4 дня в секундах) Время жизни куки - 345600 (4 дня)
Вот актуальный вопрос: как я могу узнать, какое поведение пользователя приводит к исключению?
ОБНОВЛЕНИЕ До сих пор я знаю, что исключение происходит в следующих классах согласно сделанному запросу, для меня это ничего не значит, к сожалению.
/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
ОБНОВЛЕНИЕ 2 : сессии хранятся в файлах и очищаются сборщиком мусора сессий PHP, независимо от того, является ли это хорошим выбором или нет, выходит за рамки этого вопроса.