Para trabalhar com Cookies no Magento 2, basta criar uma classe para fazer o gerenciamento deles, conforme exemplo:
<?php namespace MyVendor\MyModule\Cookie; use Magento\Framework\Session\SessionManagerInterface; use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory; use Magento\Framework\Stdlib\Cookie\PublicCookieMetadata; use Magento\Framework\Stdlib\CookieManagerInterface; class Cookie { /** * @var \Magento\Framework\Stdlib\CookieManagerInterface */ protected $_cookieManager; /** * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory */ protected $_cookieMetadataFactory; /** * @var \Magento\Framework\Session\SessionManagerInterface */ protected $_sessionManager; /** * @var \Magento\Framework\ObjectManagerInterface */ protected $_objectManager; /** * @var Magento\Framework\HTTP\PhpEnvironment\RemoteAddress */ protected $_remoteAddressInstance; /** * [__construct ] * * @param CookieManagerInterface $cookieManager * @param CookieMetadataFactory $cookieMetadataFactory * @param SessionManagerInterface $sessionManager * @param \Magento\Framework\ObjectManagerInterface $objectManager */ public function __construct( CookieManagerInterface $cookieManager, CookieMetadataFactory $cookieMetadataFactory, SessionManagerInterface $sessionManager, \Magento\Framework\ObjectManagerInterface $objectManager ) { $this->_cookieManager = $cookieManager; $this->_cookieMetadataFactory = $cookieMetadataFactory; $this->_sessionManager = $sessionManager; $this->_objectManager = $objectManager; $this->_remoteAddressInstance = $this->_objectManager->get( 'Magento\Framework\HTTP\PhpEnvironment\RemoteAddress' ); } /** * Get data from cookie set in remote address * * @return value */ public function get() { return $this->_cookieManager->getCookie($this->getRemoteAddress()); } /** * Set data to cookie in remote address * * @param [string] $value [value of cookie] * @param integer $duration [duration for cookie] * * @return void */ public function set($value, $duration = 86400) { $metadata = $this->_cookieMetadataFactory ->createPublicCookieMetadata() ->setDuration($duration) ->setPath($this->_sessionManager->getCookiePath()) ->setDomain($this->_sessionManager->getCookieDomain()); $this->_cookieManager->setPublicCookie( $this->getRemoteAddress(), $value, $metadata ); } /** * delete cookie remote address * * @return void */ public function delete() { $this->_cookieManager->deleteCookie( $this->getRemoteAddress(), $this->_cookieMetadataFactory ->createCookieMetadata() ->setPath($this->_sessionManager->getCookiePath()) ->setDomain($this->_sessionManager->getCookieDomain()) ); } /** * used to get remote address, in which cookie data is set * * @return [string] [returns remote address] */ public function getRemoteAddress() { return $this->_remoteAddressInstance->getRemoteAddress(); } }
Criando Cookie
public function set($value, $duration = 86400) { $metadata = $this->_cookieMetadataFactory ->createPublicCookieMetadata() ->setDuration($duration) ->setPath($this->_sessionManager->getCookiePath()) ->setDomain($this->_sessionManager->getCookieDomain()); $this->_cookieManager->setPublicCookie( $this->getRemoteAddress(), $value, $metadata ); }
Pegando Cookie
public function get() { return $this->_cookieManager->getCookie($this->getRemoteAddress()); }
Removendo Cookie
public function delete() { $this->_cookieManager->deleteCookie( $this->getRemoteAddress(), $this->_cookieMetadataFactory ->createCookieMetadata() ->setPath($this->_sessionManager->getCookiePath()) ->setDomain($this->_sessionManager->getCookieDomain()) ); }
Dúvidas? Posta aí!!!
Um abraço.