2
清漆和松节油
我发现,每当在服务器上重新启动Varnish时,我就会为用户失去会话。 这是轮到我的顾客放弃购物车了。 这是Varnish的正常行为,还是应该归咎于我的VCL?似乎不是 进一步的信息。 经过进一步调查,似乎此问题与GitHub上的Issue#725有关。 我的Magento安装版本为1.9.1.0。还应该说我的整个前端都在https下运行。我在Varnish前面使用Pound终止SSL。 在此版本中,Magento的默认行为似乎是创建辅助前端cookie,通常称为“ frontend_cid”,以尝试抵御MITM攻击。 看起来Turpentine生成的VCL文件没有传递此cookie,这导致了无效的会话。 谁能解释VCL文件如何将Magento传递给客户端的Cookie传递给他人? 我将范围缩小到Varnish,不生成所需的cookie。 从Magento 1.9.1.0开始,引入了一个“ frontend_cid” cookie来阻止MITM攻击。 可以Mage_Core_Model_Session_Abstract_Varien在第135行的类中找到 if (Mage::app()->getFrontController()->getRequest()->isSecure() && empty($cookieParams['secure'])) { // secure cookie check to prevent MITM attack $secureCookieName = $sessionName . '_cid'; if (isset($_SESSION[self::SECURE_COOKIE_CHECK_KEY]) && $_SESSION[self::SECURE_COOKIE_CHECK_KEY] !== md5($cookie->get($secureCookieName)) ) { session_regenerate_id(false); $sessionHosts = $this->getSessionHosts(); $currentCookieDomain = $cookie->getDomain(); foreach …