|
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