Я размещаю сайт Zend Framework 3 в MS Azure. Существует проблема с проверкой сеанса, поскольку шлюз приложений Azure действует как обратный прокси-сервер, который не нравится удаленному средству проверки адресов, поэтому сеанс не читается.
Я могу видеть из ссылки на класс для удаленного адреса, что есть метод setTrustedProxies()
который, согласно документации, я могу передать массив IP-адресов. Однако я не очень понимаю, как это сделать.
Я настраиваю session_manager в global.php
'session_manager' => [
// Session validators (used for security).
'validators' => [
RemoteAddr::class,
HttpUserAgent::class,
],
],
Затем в Module.php я создаю экземпляр диспетчера сеансов, используя
$sessionManager = $serviceManager->get(SessionManager::class);
Затем я пытаюсь добавить доверенные прокси с использованием поддельных IP-адресов:
$sessionManager = $serviceManager->get(SessionManager::class);
$request = $serviceManager->get('Request');
$remAdd = $request->getServer()->get('REMOTE_ADDR');
$remoteAddr = new RemoteAdddress($remAdd);
$remoteAddr->setTrustedProxies(['192.98.98.11', '187.2.2.10']);
$remoteAddr->setProxyHeader('X-Forwarded-For');
$remoteAddr->setUseProxy($useProxy = true);
$chain = $sessionManager->getValidatorChain();
$chain->attach('session.validate', array($remoteAddr, 'isValid'));
Я почти уверен, что это неправильный способ сделать это, но я не могу найти в Интернете никакой документации по настройке доверенных прокси.
Если я сделаю
$chain = $sessionManager->getValidatorChain();
print_r($chain);
после добавления прокси я не вижу ссылки на прокси в выводе
Zend\Session\ValidatorChain Object
(
[events:protected] => Array
(
[session.validate] => Array
(
[1] => Array
(
[0] => Array
(
[0] => Array
(
[0] => Zend\Session\Validator\RemoteAddr Object
(
[data:protected] => 127.0.0.1
)
[1] => isValid
)
)
)
)
)
[eventPrototype:protected] => Zend\EventManager\Event Object
(
[name:protected] =>
[target:protected] =>
[params:protected] => Array
(
)
[stopPropagation:protected] =>
)
[identifiers:protected] => Array
(
)
[sharedManager:protected] =>
[storage:protected] => Zend\Session\Storage\SessionArrayStorage Object
(
)
)
Как я уже сказал, я почти уверен, что поступаю неправильно, поэтому буду очень благодарен за любую помощь в поиске правильного метода.