/** * @param Observer $observer * @return void * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function execute(Observer $observer) { /** @var $customer \Magento\Customer\Api\Data\CustomerInterface */ $customer = $observer->getEvent()->getCustomer(); // Check if customer is valid (remove persistent cookie for invalid customer) if (!$customer || !$customer->getId() || !$this->_persistentSession->isRememberMeChecked()) { $this->_sessionFactory->create()->removePersistentCookie(); return; } $persistentLifeTime = $this->_persistentData->getLifeTime(); // Delete persistent session, if persistent could not be applied if ($this->_persistentData->isEnabled() && $persistentLifeTime <= 0) { // Remove current customer persistent session $this->_sessionFactory->create()->deleteByCustomerId($customer->getId()); return; } /** @var $sessionModel \Magento\Persistent\Model\Session */ $sessionModel = $this->_persistentSession->getSession(); // Check if session is wrong or not exists, so create new session if (!$sessionModel->getId() || $sessionModel->getCustomerId() != $customer->getId()) { /** @var \Magento\Persistent\Model\Session $sessionModel */ $sessionModel = $this->_sessionFactory->create(); $sessionModel->setLoadExpired()->loadByCustomerId($customer->getId()); if (!$sessionModel->getId()) { /** @var \Magento\Persistent\Model\Session $sessionModel */ $sessionModel = $this->_sessionFactory->create(); $sessionModel->setCustomerId($customer->getId())->save(); } $this->_persistentSession->setSession($sessionModel); } // Set new cookie if ($sessionModel->getId()) { $sessionModel->setPersistentCookie($persistentLifeTime, $this->_customerSession->getCookiePath()); } }
/** * Renew persistent cookie * * @param Observer $observer * @return void */ public function execute(Observer $observer) { if (!$this->_persistentData->canProcess($observer) || !$this->_persistentData->isEnabled() || !$this->_persistentSession->isPersistent()) { return; } /** @var $request \Magento\Framework\App\RequestInterface */ $request = $observer->getEvent()->getRequest(); if ($this->_customerSession->isLoggedIn() || $request->getFullActionName() == 'customer_account_logout') { $this->_sessionFactory->create()->renewPersistentCookie($this->_persistentData->getLifeTime(), $this->_customerSession->getCookiePath()); } }
/** * Get date-time before which persistent session is expired * * @param int|string|\Magento\Store\Model\Store $store * @return string */ public function getExpiredBefore($store = null) { return gmdate('Y-m-d H:i:s', time() - $this->_persistentData->getLifeTime($store)); }