Skip to content

Commit 9c84204

Browse files
committed
MAGETWO-34228: Session must not be cleared for POST request if layout is cacheable
- refactorered DepersonalizePlugin to reuse checking logic
1 parent 746a427 commit 9c84204

File tree

12 files changed

+328
-524
lines changed

12 files changed

+328
-524
lines changed

app/code/Magento/Catalog/Model/Layout/DepersonalizePlugin.php

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,17 @@
77
*/
88
namespace Magento\Catalog\Model\Layout;
99

10+
use Magento\PageCache\Model\DepersonalizeChecker;
11+
1012
/**
1113
* Class DepersonalizePlugin
1214
*/
1315
class DepersonalizePlugin
1416
{
1517
/**
16-
* @var \Magento\Framework\App\RequestInterface
17-
*/
18-
protected $request;
19-
20-
/**
21-
* @var \Magento\Framework\Module\Manager
22-
*/
23-
protected $moduleManager;
24-
25-
/**
26-
* @var \Magento\PageCache\Model\Config
18+
* @var DepersonalizeChecker
2719
*/
28-
protected $cacheConfig;
20+
protected $depersonalizeChecker;
2921

3022
/**
3123
* Catalog session
@@ -35,21 +27,15 @@ class DepersonalizePlugin
3527
protected $catalogSession;
3628

3729
/**
30+
* @param DepersonalizeChecker $depersonalizeChecker
3831
* @param \Magento\Catalog\Model\Session $catalogSession
39-
* @param \Magento\Framework\App\RequestInterface $request
40-
* @param \Magento\Framework\Module\Manager $moduleManager
41-
* @param \Magento\PageCache\Model\Config $cacheConfig
4232
*/
4333
public function __construct(
44-
\Magento\Catalog\Model\Session $catalogSession,
45-
\Magento\Framework\Module\Manager $moduleManager,
46-
\Magento\Framework\App\RequestInterface $request,
47-
\Magento\PageCache\Model\Config $cacheConfig
34+
DepersonalizeChecker $depersonalizeChecker,
35+
\Magento\Catalog\Model\Session $catalogSession
4836
) {
4937
$this->catalogSession = $catalogSession;
50-
$this->request = $request;
51-
$this->moduleManager = $moduleManager;
52-
$this->cacheConfig = $cacheConfig;
38+
$this->depersonalizeChecker = $depersonalizeChecker;
5339
}
5440

5541
/**
@@ -61,12 +47,7 @@ public function __construct(
6147
*/
6248
public function afterGenerateXml(\Magento\Framework\View\LayoutInterface $subject, $result)
6349
{
64-
if ($this->moduleManager->isEnabled('Magento_PageCache')
65-
&& $this->cacheConfig->isEnabled()
66-
&& !$this->request->isAjax()
67-
&& ($this->request->isGet() || $this->request->isHead())
68-
&& $subject->isCacheable()
69-
) {
50+
if ($this->depersonalizeChecker->checkIfDepersonalize($subject)) {
7051
$this->catalogSession->clearStorage();
7152
}
7253
return $result;

app/code/Magento/Checkout/Model/Layout/DepersonalizePlugin.php

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,36 @@
33
* Copyright © 2015 Magento. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
76
namespace Magento\Checkout\Model\Layout;
87

8+
use Magento\PageCache\Model\DepersonalizeChecker;
9+
910
/**
1011
* Class DepersonalizePlugin
1112
*/
1213
class DepersonalizePlugin
1314
{
1415
/**
15-
* @var \Magento\Checkout\Model\Session
16-
*/
17-
protected $checkoutSession;
18-
19-
/**
20-
* @var \Magento\Framework\Module\Manager
16+
* @var DepersonalizeChecker
2117
*/
22-
protected $moduleManager;
18+
protected $depersonalizeChecker;
2319

2420
/**
25-
* @var \Magento\Framework\App\RequestInterface
26-
*/
27-
protected $request;
28-
29-
/**
30-
* @var \Magento\PageCache\Model\Config
21+
* @var \Magento\Checkout\Model\Session
3122
*/
32-
protected $cacheConfig;
23+
protected $checkoutSession;
3324

3425
/**
26+
* @param DepersonalizeChecker $depersonalizeChecker
3527
* @param \Magento\Checkout\Model\Session $checkoutSession
36-
* @param \Magento\Framework\Module\Manager $moduleManager
37-
* @param \Magento\Framework\App\RequestInterface $request
38-
* @param \Magento\PageCache\Model\Config $cacheConfig
3928
*/
4029
public function __construct(
41-
\Magento\Checkout\Model\Session $checkoutSession,
42-
\Magento\Framework\Module\Manager $moduleManager,
43-
\Magento\Framework\App\RequestInterface $request,
44-
\Magento\PageCache\Model\Config $cacheConfig
30+
DepersonalizeChecker $depersonalizeChecker,
31+
\Magento\Checkout\Model\Session $checkoutSession
32+
4533
) {
4634
$this->checkoutSession = $checkoutSession;
47-
$this->moduleManager = $moduleManager;
48-
$this->request = $request;
49-
$this->cacheConfig = $cacheConfig;
35+
$this->depersonalizeChecker = $depersonalizeChecker;
5036
}
5137

5238
/**
@@ -58,12 +44,7 @@ public function __construct(
5844
*/
5945
public function afterGenerateXml(\Magento\Framework\View\LayoutInterface $subject, $result)
6046
{
61-
if ($this->moduleManager->isEnabled('Magento_PageCache')
62-
&& $this->cacheConfig->isEnabled()
63-
&& !$this->request->isAjax()
64-
&& ($this->request->isGet() || $this->request->isHead())
65-
&& $subject->isCacheable()
66-
) {
47+
if ($this->depersonalizeChecker->checkIfDepersonalize($subject)) {
6748
$this->checkoutSession->clearStorage();
6849
}
6950
return $result;

app/code/Magento/Customer/Model/Layout/DepersonalizePlugin.php

Lines changed: 12 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,17 @@
77
*/
88
namespace Magento\Customer\Model\Layout;
99

10+
use Magento\PageCache\Model\DepersonalizeChecker;
1011
/**
1112
* Class DepersonalizePlugin
1213
*/
1314
class DepersonalizePlugin
1415
{
16+
/**
17+
* @var DepersonalizeChecker
18+
*/
19+
protected $depersonalizeChecker;
20+
1521
/**
1622
* @var \Magento\Framework\Session\SessionManagerInterface
1723
*/
@@ -27,16 +33,6 @@ class DepersonalizePlugin
2733
*/
2834
protected $customerFactory;
2935

30-
/**
31-
* @var \Magento\Framework\App\RequestInterface
32-
*/
33-
protected $request;
34-
35-
/**
36-
* @var \Magento\Framework\Module\Manager
37-
*/
38-
protected $moduleManager;
39-
4036
/**
4137
* @var \Magento\Customer\Model\Visitor
4238
*/
@@ -53,35 +49,24 @@ class DepersonalizePlugin
5349
protected $formKey;
5450

5551
/**
56-
* @var \Magento\PageCache\Model\Config
57-
*/
58-
protected $cacheConfig;
59-
60-
/**
52+
* @param DepersonalizeChecker $depersonalizeChecker
6153
* @param \Magento\Framework\Session\SessionManagerInterface $session
6254
* @param \Magento\Customer\Model\Session $customerSession
6355
* @param \Magento\Customer\Model\CustomerFactory $customerFactory
64-
* @param \Magento\Framework\App\RequestInterface $request
65-
* @param \Magento\Framework\Module\Manager $moduleManager
6656
* @param \Magento\Customer\Model\Visitor $visitor
67-
* @param \Magento\PageCache\Model\Config $cacheConfig
6857
*/
6958
public function __construct(
59+
DepersonalizeChecker $depersonalizeChecker,
7060
\Magento\Framework\Session\SessionManagerInterface $session,
7161
\Magento\Customer\Model\Session $customerSession,
7262
\Magento\Customer\Model\CustomerFactory $customerFactory,
73-
\Magento\Framework\App\RequestInterface $request,
74-
\Magento\Framework\Module\Manager $moduleManager,
75-
\Magento\Customer\Model\Visitor $visitor,
76-
\Magento\PageCache\Model\Config $cacheConfig
63+
\Magento\Customer\Model\Visitor $visitor
7764
) {
7865
$this->session = $session;
7966
$this->customerSession = $customerSession;
8067
$this->customerFactory = $customerFactory;
81-
$this->request = $request;
82-
$this->moduleManager = $moduleManager;
8368
$this->visitor = $visitor;
84-
$this->cacheConfig = $cacheConfig;
69+
$this->depersonalizeChecker = $depersonalizeChecker;
8570
}
8671

8772
/**
@@ -92,12 +77,7 @@ public function __construct(
9277
*/
9378
public function beforeGenerateXml(\Magento\Framework\View\LayoutInterface $subject)
9479
{
95-
if ($this->moduleManager->isEnabled('Magento_PageCache')
96-
&& $this->cacheConfig->isEnabled()
97-
&& !$this->request->isAjax()
98-
&& ($this->request->isGet() || $this->request->isHead())
99-
&& $subject->isCacheable()
100-
) {
80+
if ($this->depersonalizeChecker->checkIfDepersonalize($subject)) {
10181
$this->customerGroupId = $this->customerSession->getCustomerGroupId();
10282
$this->formKey = $this->session->getData(\Magento\Framework\Data\Form\FormKey::FORM_KEY);
10383
}
@@ -113,12 +93,7 @@ public function beforeGenerateXml(\Magento\Framework\View\LayoutInterface $subje
11393
*/
11494
public function afterGenerateXml(\Magento\Framework\View\LayoutInterface $subject, $result)
11595
{
116-
if ($this->moduleManager->isEnabled('Magento_PageCache')
117-
&& $this->cacheConfig->isEnabled()
118-
&& !$this->request->isAjax()
119-
&& ($this->request->isGet() || $this->request->isHead())
120-
&& $subject->isCacheable()
121-
) {
96+
if ($this->depersonalizeChecker->checkIfDepersonalize($subject)) {
12297
$this->visitor->setSkipRequestLogging(true);
12398
$this->visitor->unsetData();
12499
$this->session->clearStorage();
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\PageCache\Model;
7+
8+
/**
9+
* Checks if session should be depersonalized in Depersonalize plugin
10+
*/
11+
class DepersonalizeChecker
12+
{
13+
/**
14+
* Request
15+
*
16+
* @var \Magento\Framework\App\RequestInterface
17+
*/
18+
private $request;
19+
20+
/**
21+
* Module manager
22+
*
23+
* @var \Magento\Framework\Module\Manager
24+
*/
25+
private $moduleManager;
26+
27+
/**
28+
* Cache config
29+
*
30+
* @var Config
31+
*/
32+
private $cacheConfig;
33+
34+
/**
35+
* @param \Magento\Framework\App\RequestInterface $request
36+
* @param \Magento\Framework\Module\Manager $moduleManager
37+
* @param Config $cacheConfig
38+
*/
39+
public function __construct(
40+
\Magento\Framework\App\RequestInterface $request,
41+
\Magento\Framework\Module\Manager $moduleManager,
42+
Config $cacheConfig
43+
) {
44+
$this->request = $request;
45+
$this->moduleManager = $moduleManager;
46+
$this->cacheConfig = $cacheConfig;
47+
}
48+
49+
/**
50+
* Check if depersonalize or not
51+
*
52+
* @param \Magento\Framework\View\LayoutInterface $subject
53+
* @return bool
54+
*/
55+
public function checkIfDepersonalize(\Magento\Framework\View\LayoutInterface $subject)
56+
{
57+
return ($this->moduleManager->isEnabled('Magento_PageCache')
58+
&& $this->cacheConfig->isEnabled()
59+
&& !$this->request->isAjax()
60+
&& ($this->request->isGet() || $this->request->isHead())
61+
&& $subject->isCacheable());
62+
}
63+
}

app/code/Magento/PageCache/Model/Layout/DepersonalizePlugin.php

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,57 +3,42 @@
33
* Copyright © 2015 Magento. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6-
76
namespace Magento\PageCache\Model\Layout;
87

8+
use Magento\PageCache\Model\DepersonalizeChecker;
9+
910
/**
1011
* Class DepersonalizePlugin
1112
*/
1213
class DepersonalizePlugin
1314
{
1415
/**
15-
* @var \Magento\Framework\App\RequestInterface
16-
*/
17-
protected $request;
18-
19-
/**
20-
* @var \Magento\Framework\Module\Manager
16+
* @var DepersonalizeChecker
2117
*/
22-
protected $moduleManager;
18+
protected $depersonalizeChecker;
2319

2420
/**
2521
* @var \Magento\Framework\Event\Manager
2622
*/
2723
protected $eventManager;
2824

29-
/**
30-
* @var \Magento\PageCache\Model\Config
31-
*/
32-
protected $cacheConfig;
33-
3425
/**
3526
* @var \Magento\Framework\Message\Session
3627
*/
3728
protected $messageSession;
3829

3930
/**
40-
* @param \Magento\Framework\App\RequestInterface $request
41-
* @param \Magento\Framework\Module\Manager $moduleManager
31+
* @param DepersonalizeChecker $depersonalizeChecker
4232
* @param \Magento\Framework\Event\Manager $eventManager
43-
* @param \Magento\PageCache\Model\Config $cacheConfig
4433
* @param \Magento\Framework\Message\Session $messageSession
4534
*/
4635
public function __construct(
47-
\Magento\Framework\App\RequestInterface $request,
48-
\Magento\Framework\Module\Manager $moduleManager,
36+
DepersonalizeChecker $depersonalizeChecker,
4937
\Magento\Framework\Event\Manager $eventManager,
50-
\Magento\PageCache\Model\Config $cacheConfig,
5138
\Magento\Framework\Message\Session $messageSession
5239
) {
53-
$this->request = $request;
54-
$this->moduleManager = $moduleManager;
40+
$this->depersonalizeChecker = $depersonalizeChecker;
5541
$this->eventManager = $eventManager;
56-
$this->cacheConfig = $cacheConfig;
5742
$this->messageSession = $messageSession;
5843
}
5944

@@ -66,12 +51,7 @@ public function __construct(
6651
*/
6752
public function afterGenerateXml(\Magento\Framework\View\LayoutInterface $subject, $result)
6853
{
69-
if ($this->moduleManager->isEnabled('Magento_PageCache')
70-
&& $this->cacheConfig->isEnabled()
71-
&& !$this->request->isAjax()
72-
&& ($this->request->isGet() || $this->request->isHead())
73-
&& $subject->isCacheable()
74-
) {
54+
if ($this->depersonalizeChecker->checkIfDepersonalize($subject)) {
7555
$this->eventManager->dispatch('depersonalize_clear_session');
7656
session_write_close();
7757
$this->messageSession->clearStorage();

0 commit comments

Comments
 (0)