Я доглядаю за магазином 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 дні в секундах) Тривалість файлу cookie - 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, незалежно від того, чи це вдалий вибір, чи не виходить за межі цього питання.