Magento 2.2.2: Сеанс клиента не работает с включенным кэшем
Я пробовал этот код, но когда кэш отключен. это работает, но когда я включаю кэш, он не работает.
$ObjectManager = \Magento\Framework\App\ObjectManager::getInstance();
$session = $ObjectManager->get('Magento\Customer\Model\Session');
if($session->isLoggedIn())
{
}
4
3 answers
Используйте приведенный ниже код:
$ObjectManager= \Magento\Framework\App\ObjectManager::getInstance();
$context = $ObjectManager->get('Magento\Framework\App\Http\Context');
$isLoggedIn = $context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
return $isLoggedIn;
5
Author: Kishan Patadia, 2017-12-21 05:32:49
Лучше всего использовать Magento\Framework\App\Http\Context
, чтобы проверить, вошел клиент в систему или нет. И, избегая прямого использования диспетчера объектов.
Например:
<?php
namespace Vendor\Customer\Block\Account;
use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Element\Template\Context;
use Magento\Framework\App\Http\Context as HttpContext;
class Customer extends Template
{
/**
* @var HttpContext
*/
protected $httpContext;
/**
* @param Context $context
* @param HttpContext $httpContext
* @param array $data
*/
public function __construct(
Context $context,
HttpContext $httpContext,
array $data = []
) {
parent::__construct($context, $data);
$this->httpContext = $httpContext;
}
/**
* Checking customer login status
*
* @return bool
*/
public function customerLoggedIn()
{
return (bool)$this->httpContext->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
}
}
7
Author: Khoa TruongDinh, 2017-12-21 05:25:25
Если вы создадите() сеанс, именно вы можете принудительно включить текущий сеанс клиента с включенным полным кэшем страниц. Но я не уверен, какой принцип он использует.
$app = $ObjectManager->get('Magento\Framework\App\Http\Context');
if ($app->getValue('customer_logged_in')) {
$customerSession = $ObjectManager->create('Magento\Customer\Model\SessionFactory')->create();
$customerData = $customerSession->getData();
$customerId = isset($customerData['customer_id'])?$customerData['customer_id']:'';
}
0
Author: leo, 2019-08-29 03:45:25