|
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