Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
RegisterFormKeyFromCookie.php
Go to the documentation of this file.
1 <?php
8 declare(strict_types=1);
9 
10 namespace Magento\PageCache\Plugin;
11 
12 use Magento\Framework\App\PageCache\FormKey as CacheFormKey;
17 
22 {
26  private $cookieFormKey;
27 
31  private $escaper;
32 
36  private $formKey;
37 
41  private $cookieMetadataFactory;
42 
46  private $sessionConfig;
47 
55  public function __construct(
56  CacheFormKey $cacheFormKey,
57  Escaper $escaper,
58  FormKey $formKey,
59  CookieMetadataFactory $cookieMetadataFactory,
60  ConfigInterface $sessionConfig
61  ) {
62  $this->cookieFormKey = $cacheFormKey;
63  $this->escaper = $escaper;
64  $this->formKey = $formKey;
65  $this->cookieMetadataFactory = $cookieMetadataFactory;
66  $this->sessionConfig = $sessionConfig;
67  }
68 
76  public function beforeDispatch(): void
77  {
78  if ($this->cookieFormKey->get()) {
79  $this->updateCookieFormKey($this->cookieFormKey->get());
80 
81  $this->formKey->set(
82  $this->escaper->escapeHtml($this->cookieFormKey->get())
83  );
84  }
85  }
86 
91  private function updateCookieFormKey(string $formKey): void
92  {
93  $cookieMetadata = $this->cookieMetadataFactory
94  ->createPublicCookieMetadata();
95  $cookieMetadata->setDomain($this->sessionConfig->getCookieDomain());
96  $cookieMetadata->setPath($this->sessionConfig->getCookiePath());
97  $lifetime = $this->sessionConfig->getCookieLifetime();
98  if ($lifetime !== 0) {
99  $cookieMetadata->setDuration($lifetime);
100  }
101 
102  $this->cookieFormKey->set(
103  $formKey,
104  $cookieMetadata
105  );
106  }
107 }