我正在照顾一个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() ) {
Magento使用最新发行版将此if块添加到文件中。这显然是一种制动变化,请参阅下面的更多详细信息。
例外情况经常发生,例如每天十几次。但是除非我在上面的条件中完全符合条件,否则我无法重新创建导致异常的条件。例外最常见于产品详细信息页面和一页结帐的最后一步。该商店是b2b商店,用户必须登录才能查看产品页面或能够结帐,这意味着会话无效/过期时,用户将被重定向到登录页面。目前,对我来说更重要的是在结帐时解决此问题。
从用户的角度来看,发生了什么:用户填充购物车,继续进行结帐并到达最后一步,然后他/她单击“提交订单”按钮,但没有任何反应。在后台,Magento的JS执行AJAX请求,并且JS希望收到JSON,但是如果发生此错误,则会返回登录页面的HTML,JavaScript无法解析该HTML,并且它什么也不做。这对于用户而言超级混乱。
好吧,这不是完整的用户方案,我们联系了用户,他们告诉我们,他们在填充购物车和提交订单之间等待了几天,这实际上很难弄清楚,因为人们根本不记得这一点。
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会话垃圾收集器清理,无论这是一个不错的选择,这都不在本问题的范围之内。