Skip to content

Commit 05420b6

Browse files
author
Roger
committed
Duplicate cache fpc for same page with same query
1 parent 6a5060a commit 05420b6

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

app/code/Magento/PageCache/Model/App/Request/Http/IdentifierForSave.php

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
namespace Magento\PageCache\Model\App\Request\Http;
99

1010
use Magento\Framework\App\Http\Context;
11+
use Magento\Framework\App\PageCache\IdentifierInterface;
1112
use Magento\Framework\App\Request\Http;
1213
use Magento\Framework\Serialize\Serializer\Json;
13-
use Magento\Framework\App\PageCache\IdentifierInterface;
1414

1515
/**
1616
* Page unique identifier
@@ -36,12 +36,32 @@ public function __construct(
3636
*/
3737
public function getValue()
3838
{
39+
$url = $this->request->getUriString();
40+
list($baseUrl, $query) = $this->reconstructUrl($url);
3941
$data = [
4042
$this->request->isSecure(),
41-
$this->request->getUriString(),
43+
$baseUrl,
44+
$query,
4245
$this->context->getVaryString()
4346
];
4447

4548
return sha1($this->serializer->serialize($data));
4649
}
50+
51+
/**
52+
* Reconstruct url and sort query
53+
*
54+
* @param string $url
55+
* @return array
56+
*/
57+
private function reconstructUrl($url)
58+
{
59+
$baseUrl = strtok($url, '?');
60+
$query = $this->request->getQuery()->toArray();
61+
if (!empty($query)) {
62+
ksort($query);
63+
$query = http_build_query($query);
64+
}
65+
return [$baseUrl, $query];
66+
}
4767
}

lib/internal/Magento/Framework/App/PageCache/Identifier.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,32 @@ public function __construct(
5050
*/
5151
public function getValue()
5252
{
53+
$url = $this->request->getUriString();
54+
list($baseUrl, $query) = $this->reconstructUrl($url);
5355
$data = [
5456
$this->request->isSecure(),
55-
$this->request->getUriString(),
57+
$baseUrl,
58+
$query,
5659
$this->request->get(\Magento\Framework\App\Response\Http::COOKIE_VARY_STRING)
5760
?: $this->context->getVaryString()
5861
];
59-
6062
return sha1($this->serializer->serialize($data));
6163
}
64+
65+
/**
66+
* Reconstruct url and sort query
67+
*
68+
* @param string $url
69+
* @return array
70+
*/
71+
private function reconstructUrl($url)
72+
{
73+
$baseUrl = strtok($url, '?');
74+
$query = $this->request->getQuery()->toArray();
75+
if (!empty($query)) {
76+
ksort($query);
77+
$query = http_build_query($query);
78+
}
79+
return [$baseUrl, $query];
80+
}
6281
}

0 commit comments

Comments
 (0)