Skip to content

Commit 1b84b62

Browse files
committed
Merge remote-tracking branch 'origin/AC-1170' into GL_Mainline_PR_22122021
2 parents f69a8ee + e5da1a7 commit 1b84b62

File tree

2 files changed

+58
-9
lines changed

2 files changed

+58
-9
lines changed

lib/internal/Magento/Framework/Session/SaveHandler.php

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@
66

77
namespace Magento\Framework\Session;
88

9+
use Magento\Framework\App\Area;
10+
use Magento\Framework\App\ObjectManager;
11+
use Magento\Framework\App\State;
912
use Magento\Framework\Exception\LocalizedException;
1013
use Magento\Framework\Exception\SessionException;
14+
use Magento\Framework\Message\ManagerInterface;
1115
use Magento\Framework\Session\Config\ConfigInterface;
1216
use Psr\Log\LoggerInterface;
1317

1418
/**
1519
* Magento session save handler.
20+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1621
*/
1722
class SaveHandler implements SaveHandlerInterface
1823
{
@@ -48,25 +53,41 @@ class SaveHandler implements SaveHandlerInterface
4853
*/
4954
private $sessionMaxSizeConfig;
5055

56+
/**
57+
* @var ManagerInterface
58+
*/
59+
private $messageManager;
60+
61+
/**
62+
* @var State|mixed
63+
*/
64+
private $appState;
65+
5166
/**
5267
* @param SaveHandlerFactory $saveHandlerFactory
5368
* @param ConfigInterface $sessionConfig
5469
* @param LoggerInterface $logger
5570
* @param SessionMaxSizeConfig $sessionMaxSizeConfigs
5671
* @param string $default
72+
* @param ManagerInterface|null $messageManager
73+
* @param State|null $appState
5774
*/
5875
public function __construct(
5976
SaveHandlerFactory $saveHandlerFactory,
6077
ConfigInterface $sessionConfig,
6178
LoggerInterface $logger,
6279
SessionMaxSizeConfig $sessionMaxSizeConfigs,
63-
$default = self::DEFAULT_HANDLER
80+
$default = self::DEFAULT_HANDLER,
81+
ManagerInterface $messageManager = null,
82+
State $appState = null
6483
) {
6584
$this->saveHandlerFactory = $saveHandlerFactory;
6685
$this->sessionConfig = $sessionConfig;
6786
$this->logger = $logger;
6887
$this->defaultHandler = $default;
6988
$this->sessionMaxSizeConfig = $sessionMaxSizeConfigs;
89+
$this->messageManager = $messageManager ?: ObjectManager::getInstance()->get(ManagerInterface::class);
90+
$this->appState = $appState ?: ObjectManager::getInstance()->get(State::class);
7091
}
7192

7293
/**
@@ -99,10 +120,22 @@ public function close()
99120
* @param string $sessionId
100121
* @return string
101122
*/
102-
#[\ReturnTypeWillChange]
103-
public function read($sessionId)
123+
public function read($sessionId): string
104124
{
105-
return $this->callSafely('read', $sessionId);
125+
$sessionData = $this->callSafely('read', $sessionId);
126+
$sessionMaxSize = $this->sessionMaxSizeConfig->getSessionMaxSize();
127+
$sessionSize = strlen($sessionData);
128+
129+
if ($sessionSize !== null && $sessionMaxSize < $sessionSize) {
130+
$sessionData = '';
131+
if ($this->appState->getAreaCode() === Area::AREA_FRONTEND) {
132+
$this->messageManager->addErrorMessage(
133+
__('There is an error. Please Contact store administrator.')
134+
);
135+
}
136+
}
137+
138+
return $sessionData;
106139
}
107140

108141
/**
@@ -131,7 +164,7 @@ public function write($sessionId, $data)
131164
)
132165
);
133166

134-
return $this->callSafely('write', $sessionId, $this->read($sessionId));
167+
return $this->callSafely('write', $sessionId, $data);
135168
}
136169

137170
/**

lib/internal/Magento/Framework/Session/Test/Unit/SaveHandlerTest.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,17 +119,33 @@ public function testWriteSessionMaxSizeNull()
119119
$this->assertTrue($this->saveHandler->write("test_session_id", "testdata"));
120120
}
121121

122-
public function testWriteMoreThanSessionMaxSize()
122+
public function testWriteMoreThanSessionMaxSize(): void
123123
{
124-
$this->sessionMaxSizeConfigMock->expects($this->once())
124+
$this->sessionMaxSizeConfigMock
125+
->expects($this->once())
126+
->method('getSessionMaxSize')
127+
->willReturn(1);
128+
129+
$this->saveHandlerAdapterMock
130+
->expects($this->never())
131+
->method('read');
132+
133+
$this->assertTrue($this->saveHandler->write("test_session_id", "testdata"));
134+
}
135+
136+
public function testReadMoreThanSessionMaxSize(): void
137+
{
138+
$this->sessionMaxSizeConfigMock
139+
->expects($this->once())
125140
->method('getSessionMaxSize')
126141
->willReturn(1);
127142

128-
$this->saveHandlerAdapterMock->expects($this->once())
143+
$this->saveHandlerAdapterMock
144+
->expects($this->once())
129145
->method('read')
130146
->with('test_session_id')
131147
->willReturn('test_session_data');
132148

133-
$this->assertTrue($this->saveHandler->write("test_session_id", "testdata"));
149+
$this->assertEquals(null, $this->saveHandler->read("test_session_id"));
134150
}
135151
}

0 commit comments

Comments
 (0)