|
6 | 6 |
|
7 | 7 | namespace Magento\Framework\Session; |
8 | 8 |
|
| 9 | +use Magento\Framework\App\ObjectManager; |
| 10 | +use Magento\Framework\App\State; |
9 | 11 | use Magento\Framework\Exception\LocalizedException; |
10 | 12 | use Magento\Framework\Exception\SessionException; |
| 13 | +use Magento\Framework\Message\ManagerInterface; |
11 | 14 | use Magento\Framework\Session\Config\ConfigInterface; |
12 | 15 | use Psr\Log\LoggerInterface; |
13 | 16 |
|
@@ -48,25 +51,38 @@ class SaveHandler implements SaveHandlerInterface |
48 | 51 | */ |
49 | 52 | private $sessionMaxSizeConfig; |
50 | 53 |
|
| 54 | + private ?ManagerInterface $messageManager; |
| 55 | + |
| 56 | + /** |
| 57 | + * @var State|mixed |
| 58 | + */ |
| 59 | + private $appState; |
| 60 | + |
51 | 61 | /** |
52 | 62 | * @param SaveHandlerFactory $saveHandlerFactory |
53 | 63 | * @param ConfigInterface $sessionConfig |
54 | 64 | * @param LoggerInterface $logger |
55 | 65 | * @param SessionMaxSizeConfig $sessionMaxSizeConfigs |
56 | 66 | * @param string $default |
| 67 | + * @param ManagerInterface|null $messageManager |
| 68 | + * @param State|null $appState |
57 | 69 | */ |
58 | 70 | public function __construct( |
59 | 71 | SaveHandlerFactory $saveHandlerFactory, |
60 | 72 | ConfigInterface $sessionConfig, |
61 | 73 | LoggerInterface $logger, |
62 | 74 | SessionMaxSizeConfig $sessionMaxSizeConfigs, |
63 | | - $default = self::DEFAULT_HANDLER |
| 75 | + $default = self::DEFAULT_HANDLER, |
| 76 | + ManagerInterface $messageManager = null, |
| 77 | + State $appState = null |
64 | 78 | ) { |
65 | 79 | $this->saveHandlerFactory = $saveHandlerFactory; |
66 | 80 | $this->sessionConfig = $sessionConfig; |
67 | 81 | $this->logger = $logger; |
68 | 82 | $this->defaultHandler = $default; |
69 | 83 | $this->sessionMaxSizeConfig = $sessionMaxSizeConfigs; |
| 84 | + $this->messageManager = $messageManager ?: ObjectManager::getInstance()->get(ManagerInterface::class); |
| 85 | + $this->appState = $appState ?: ObjectManager::getInstance()->get(State::class); |
70 | 86 | } |
71 | 87 |
|
72 | 88 | /** |
@@ -99,7 +115,22 @@ public function close() |
99 | 115 | */ |
100 | 116 | public function read($sessionId) |
101 | 117 | { |
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; |
103 | 134 | } |
104 | 135 |
|
105 | 136 | /** |
@@ -127,7 +158,7 @@ public function write($sessionId, $data) |
127 | 158 | ) |
128 | 159 | ); |
129 | 160 |
|
130 | | - return $this->callSafely('write', $sessionId, $this->read($sessionId)); |
| 161 | + return $this->callSafely('write', $sessionId, $data); |
131 | 162 | } |
132 | 163 |
|
133 | 164 | /** |
|
0 commit comments