|
6 | 6 |
|
7 | 7 | namespace Magento\Framework\Session; |
8 | 8 |
|
| 9 | +use Magento\Framework\App\Area; |
| 10 | +use Magento\Framework\App\ObjectManager; |
| 11 | +use Magento\Framework\App\State; |
9 | 12 | use Magento\Framework\Exception\LocalizedException; |
10 | 13 | use Magento\Framework\Exception\SessionException; |
| 14 | +use Magento\Framework\Message\ManagerInterface; |
11 | 15 | use Magento\Framework\Session\Config\ConfigInterface; |
12 | 16 | use Psr\Log\LoggerInterface; |
13 | 17 |
|
14 | 18 | /** |
15 | 19 | * Magento session save handler. |
| 20 | + * @SuppressWarnings(PHPMD.CouplingBetweenObjects) |
16 | 21 | */ |
17 | 22 | class SaveHandler implements SaveHandlerInterface |
18 | 23 | { |
@@ -48,25 +53,41 @@ class SaveHandler implements SaveHandlerInterface |
48 | 53 | */ |
49 | 54 | private $sessionMaxSizeConfig; |
50 | 55 |
|
| 56 | + /** |
| 57 | + * @var ManagerInterface |
| 58 | + */ |
| 59 | + private $messageManager; |
| 60 | + |
| 61 | + /** |
| 62 | + * @var State|mixed |
| 63 | + */ |
| 64 | + private $appState; |
| 65 | + |
51 | 66 | /** |
52 | 67 | * @param SaveHandlerFactory $saveHandlerFactory |
53 | 68 | * @param ConfigInterface $sessionConfig |
54 | 69 | * @param LoggerInterface $logger |
55 | 70 | * @param SessionMaxSizeConfig $sessionMaxSizeConfigs |
56 | 71 | * @param string $default |
| 72 | + * @param ManagerInterface|null $messageManager |
| 73 | + * @param State|null $appState |
57 | 74 | */ |
58 | 75 | public function __construct( |
59 | 76 | SaveHandlerFactory $saveHandlerFactory, |
60 | 77 | ConfigInterface $sessionConfig, |
61 | 78 | LoggerInterface $logger, |
62 | 79 | SessionMaxSizeConfig $sessionMaxSizeConfigs, |
63 | | - $default = self::DEFAULT_HANDLER |
| 80 | + $default = self::DEFAULT_HANDLER, |
| 81 | + ManagerInterface $messageManager = null, |
| 82 | + State $appState = null |
64 | 83 | ) { |
65 | 84 | $this->saveHandlerFactory = $saveHandlerFactory; |
66 | 85 | $this->sessionConfig = $sessionConfig; |
67 | 86 | $this->logger = $logger; |
68 | 87 | $this->defaultHandler = $default; |
69 | 88 | $this->sessionMaxSizeConfig = $sessionMaxSizeConfigs; |
| 89 | + $this->messageManager = $messageManager ?: ObjectManager::getInstance()->get(ManagerInterface::class); |
| 90 | + $this->appState = $appState ?: ObjectManager::getInstance()->get(State::class); |
70 | 91 | } |
71 | 92 |
|
72 | 93 | /** |
@@ -99,10 +120,22 @@ public function close() |
99 | 120 | * @param string $sessionId |
100 | 121 | * @return string |
101 | 122 | */ |
102 | | - #[\ReturnTypeWillChange] |
103 | | - public function read($sessionId) |
| 123 | + public function read($sessionId): string |
104 | 124 | { |
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; |
106 | 139 | } |
107 | 140 |
|
108 | 141 | /** |
@@ -131,7 +164,7 @@ public function write($sessionId, $data) |
131 | 164 | ) |
132 | 165 | ); |
133 | 166 |
|
134 | | - return $this->callSafely('write', $sessionId, $this->read($sessionId)); |
| 167 | + return $this->callSafely('write', $sessionId, $data); |
135 | 168 | } |
136 | 169 |
|
137 | 170 | /** |
|
0 commit comments