Skip to content

Commit 9e31377

Browse files
AC-1170 Session size of 276672 exceeded allowed session max size of 256000
1 parent 70870ed commit 9e31377

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

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

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@
66

77
namespace Magento\Framework\Session;
88

9+
use Magento\Framework\App\ObjectManager;
10+
use Magento\Framework\App\State;
911
use Magento\Framework\Exception\LocalizedException;
1012
use Magento\Framework\Exception\SessionException;
13+
use Magento\Framework\Message\ManagerInterface;
1114
use Magento\Framework\Session\Config\ConfigInterface;
1215
use Psr\Log\LoggerInterface;
1316

@@ -48,25 +51,38 @@ class SaveHandler implements SaveHandlerInterface
4851
*/
4952
private $sessionMaxSizeConfig;
5053

54+
private ?ManagerInterface $messageManager;
55+
56+
/**
57+
* @var State|mixed
58+
*/
59+
private $appState;
60+
5161
/**
5262
* @param SaveHandlerFactory $saveHandlerFactory
5363
* @param ConfigInterface $sessionConfig
5464
* @param LoggerInterface $logger
5565
* @param SessionMaxSizeConfig $sessionMaxSizeConfigs
5666
* @param string $default
67+
* @param ManagerInterface|null $messageManager
68+
* @param State|null $appState
5769
*/
5870
public function __construct(
5971
SaveHandlerFactory $saveHandlerFactory,
6072
ConfigInterface $sessionConfig,
6173
LoggerInterface $logger,
6274
SessionMaxSizeConfig $sessionMaxSizeConfigs,
63-
$default = self::DEFAULT_HANDLER
75+
$default = self::DEFAULT_HANDLER,
76+
ManagerInterface $messageManager = null,
77+
State $appState = null
6478
) {
6579
$this->saveHandlerFactory = $saveHandlerFactory;
6680
$this->sessionConfig = $sessionConfig;
6781
$this->logger = $logger;
6882
$this->defaultHandler = $default;
6983
$this->sessionMaxSizeConfig = $sessionMaxSizeConfigs;
84+
$this->messageManager = $messageManager ?: ObjectManager::getInstance()->get(ManagerInterface::class);
85+
$this->appState = $appState ?: ObjectManager::getInstance()->get(State::class);
7086
}
7187

7288
/**
@@ -99,7 +115,22 @@ public function close()
99115
*/
100116
public function read($sessionId)
101117
{
102-
return $this->callSafely('read', $sessionId);
118+
$sessionData = $this->callSafely('read', $sessionId);
119+
$sessionMaxSize = $this->sessionMaxSizeConfig->getSessionMaxSize();
120+
$sessionSize = strlen($sessionData);
121+
122+
if ($sessionSize !== null && $sessionMaxSize < $sessionSize) {
123+
$sessionData = '';
124+
if ($this->appState->getAreaCode() == 'frontend') {
125+
$this->messageManager->addErrorMessage(
126+
__(
127+
'There is an error. Please Contact store administrator.'
128+
)
129+
);
130+
}
131+
}
132+
133+
return $sessionData;
103134
}
104135

105136
/**
@@ -127,7 +158,7 @@ public function write($sessionId, $data)
127158
)
128159
);
129160

130-
return $this->callSafely('write', $sessionId, $this->read($sessionId));
161+
return $this->callSafely('write', $sessionId, $data);
131162
}
132163

133164
/**

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public function testWriteMoreThanSessionMaxSize()
125125
->method('getSessionMaxSize')
126126
->willReturn(1);
127127

128-
$this->saveHandlerAdapterMock->expects($this->once())
128+
$this->saveHandlerAdapterMock->expects($this->any())
129129
->method('read')
130130
->with('test_session_id')
131131
->willReturn('test_session_data');

0 commit comments

Comments
 (0)