Magento 2.2.2: Сеанс клиента не работает с включенным кэшем


Я пробовал этот код, но когда кэш отключен. это работает, но когда я включаю кэш, он не работает.

$ObjectManager = \Magento\Framework\App\ObjectManager::getInstance();
$session =  $ObjectManager->get('Magento\Customer\Model\Session');
if($session->isLoggedIn()) 
{
}
Author: Kushal, 2017-12-21

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