3
3
* Copyright © Magento, Inc. All rights reserved.
4
4
* See COPYING.txt for license details.
5
5
*/
6
+
6
7
namespace Magento \Framework \App \PageCache ;
7
8
9
+ use Magento \Framework \App \Config \ScopeConfigInterface ;
10
+ use Magento \Framework \Stdlib \CookieManagerInterface ;
11
+ use Magento \Framework \Stdlib \Cookie \CookieMetadataFactory ;
12
+ use Magento \Framework \App \Request \Http ;
13
+
8
14
/**
9
15
* PageCache Version
10
16
*
@@ -15,53 +21,38 @@ class Version
15
21
/**
16
22
* Name of cookie that holds private content version
17
23
*/
18
- const COOKIE_NAME = 'private_content_version ' ;
24
+ public const COOKIE_NAME = 'private_content_version ' ;
19
25
20
26
/**
21
27
* Ten years cookie period
22
28
*/
23
- const COOKIE_PERIOD = 315360000 ;
24
-
25
- /**
26
- * Cookie Manager
27
- *
28
- * @var \Magento\Framework\Stdlib\CookieManagerInterface
29
- */
30
- protected $ cookieManager ;
31
-
32
- /**
33
- * Request
34
- *
35
- * @var \Magento\Framework\App\Request\Http
36
- */
37
- protected $ request ;
29
+ public const COOKIE_PERIOD = 315360000 ;
38
30
39
31
/**
40
- * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory
32
+ * Config setting for disabling session for GraphQl
41
33
*/
42
- protected $ cookieMetadataFactory ;
34
+ private const XML_PATH_GRAPHQL_DISABLE_SESSION = ' graphql/session/disable ' ;
43
35
44
36
/**
45
- * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
46
- * @param \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory
47
- * @param \Magento\Framework\App\Request\Http $request
37
+ * @param CookieManagerInterface $cookieManager
38
+ * @param CookieMetadataFactory $cookieMetadataFactory
39
+ * @param Http $request
40
+ * @param ScopeConfigInterface $scopeConfig
48
41
*/
49
42
public function __construct (
50
- \Magento \Framework \Stdlib \CookieManagerInterface $ cookieManager ,
51
- \Magento \Framework \Stdlib \Cookie \CookieMetadataFactory $ cookieMetadataFactory ,
52
- \Magento \Framework \App \Request \Http $ request
43
+ private readonly CookieManagerInterface $ cookieManager ,
44
+ private readonly CookieMetadataFactory $ cookieMetadataFactory ,
45
+ private readonly Http $ request ,
46
+ private readonly ScopeConfigInterface $ scopeConfig
53
47
) {
54
- $ this ->cookieManager = $ cookieManager ;
55
- $ this ->request = $ request ;
56
- $ this ->cookieMetadataFactory = $ cookieMetadataFactory ;
57
48
}
58
49
59
50
/**
60
51
* Generate unique version identifier
61
52
*
62
53
* @return string
63
54
*/
64
- protected function generateValue ()
55
+ protected function generateValue (): string
65
56
{
66
57
//phpcs:ignore
67
58
return md5 (rand () . time ());
@@ -75,16 +66,35 @@ protected function generateValue()
75
66
*
76
67
* @return void
77
68
*/
78
- public function process ()
69
+ public function process (): void
79
70
{
80
- if ($ this ->request ->isPost ()) {
81
- $ publicCookieMetadata = $ this ->cookieMetadataFactory ->createPublicCookieMetadata ()
82
- ->setDuration (self ::COOKIE_PERIOD )
83
- ->setPath ('/ ' )
84
- ->setSecure ($ this ->request ->isSecure ())
85
- ->setHttpOnly (false )
86
- ->setSameSite ('Lax ' );
87
- $ this ->cookieManager ->setPublicCookie (self ::COOKIE_NAME , $ this ->generateValue (), $ publicCookieMetadata );
71
+ if (!$ this ->request ->isPost ()) {
72
+ return ;
88
73
}
74
+
75
+ if ($ this ->request ->getOriginalPathInfo () === '/graphql ' && $ this ->isSessionDisabled () === true ) {
76
+ return ;
77
+ }
78
+
79
+ $ publicCookieMetadata = $ this ->cookieMetadataFactory ->createPublicCookieMetadata ()
80
+ ->setDuration (self ::COOKIE_PERIOD )
81
+ ->setPath ('/ ' )
82
+ ->setSecure ($ this ->request ->isSecure ())
83
+ ->setHttpOnly (false )
84
+ ->setSameSite ('Lax ' );
85
+ $ this ->cookieManager ->setPublicCookie (self ::COOKIE_NAME , $ this ->generateValue (), $ publicCookieMetadata );
86
+ }
87
+
88
+ /**
89
+ * Returns configuration setting for disable session for GraphQl
90
+ *
91
+ * @return bool
92
+ */
93
+ private function isSessionDisabled (): bool
94
+ {
95
+ return (bool )$ this ->scopeConfig ->getValue (
96
+ self ::XML_PATH_GRAPHQL_DISABLE_SESSION ,
97
+ ScopeConfigInterface::SCOPE_TYPE_DEFAULT
98
+ );
89
99
}
90
100
}
0 commit comments