_persistentSession = $persistentSession; $this->quoteManager = $quoteManager; $this->_customerSession = $customerSession; $this->_checkoutSession = $checkoutSession; $this->_eventManager = $eventManager; $this->_persistentData = $persistentData; $this->request = $request; } /** * Check and clear session data if persistent session expired * * @param \Magento\Framework\Event\Observer $observer * @return void */ public function execute(\Magento\Framework\Event\Observer $observer) { if (!$this->_persistentData->canProcess($observer)) { return; } if ($this->_persistentData->isEnabled() && !$this->_persistentSession->isPersistent() && !$this->_customerSession->isLoggedIn() && $this->_checkoutSession->getQuoteId() && !$this->isRequestFromCheckoutPage($this->request) // persistent session does not expire on onepage checkout page ) { $this->_eventManager->dispatch('persistent_session_expired'); $this->quoteManager->expire(); $this->_customerSession->setCustomerId(null)->setCustomerGroupId(null); } } /** * Check current request is coming from onepage checkout page. * * @param \Magento\Framework\App\RequestInterface $request * @return bool */ private function isRequestFromCheckoutPage(\Magento\Framework\App\RequestInterface $request): bool { $requestUri = (string)$request->getRequestUri(); $refererUri = (string)$request->getServer('HTTP_REFERER'); /** @var bool $isCheckoutPage */ $isCheckoutPage = ( false !== strpos($requestUri, $this->checkoutPagePath) || false !== strpos($refererUri, $this->checkoutPagePath) ); return $isCheckoutPage; } }