Я пытаюсь использовать аутентификацию и сеансы в приложении ZF2. Пока у меня есть следующий код:
В моем Module.php:
// (...) rest of code public function getServiceConfig() { return array( 'factories' => array( // (...) Other factories // Authentication Service 'AuthService' => function($sm) { $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); $dbTableAuthAdapter = new DbTable($dbAdapter, 'sec_user','login','password'); $authService = new AuthenticationService(); $authService->setAdapter($dbTableAuthAdapter); return $authService; }, ), ); } // (...) rest of code
Затем в моем приложении «Вход в контроллер» у меня есть:
use Zend\Session\Container; // (...) rest of code public function loginAction() { $this->getAuthService()->getAdapter() ->setIdentity('testlogin') ->setCredential('testpass'); $auth_result = $this->getAuthService()->getAdapter()->authenticate(); if ($auth_result->isValid()) { $session = new Container(); // Exception line $session->login = 'testlogin'; // (...) other code } } // (...) rest of code
Код работает отлично, проверяет учетные данные успешно, но когда я пытаюсь сохранить некоторое значение для СЕССИИ с самым простым примером, который я нашел в документации, он терпит неудачу. Линия:
$session = new Container();
Вызывает это исключение:
Session validation failed
Что еще я могу проверить? Любая идея о том, что я делаю неправильно, будет оценена по достоинству.
Пыль – это полный след:
File: /var/www/sismedical/Server/vendor/zendframework/zendframework/library/Zend/Session/SessionManager.php:111 Message: Session validation failed Stack trace: #0 /var/www/sismedical/Server/vendor/zendframework/zendframework/library/Zend/Session/AbstractContainer.php(78): Zend\Session\SessionManager->start() #1 /var/www/sismedical/Server/module/Security/src/Security/Controller/AuthController.php(100): Zend\Session\AbstractContainer->__construct() #2 /var/www/sismedical/Server/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractActionController.php(83): Security\Controller\AuthController->loginAction() #3 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent)) #4 /var/www/sismedical/Server/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) #5 /var/www/sismedical/Server/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #6 /var/www/sismedical/Server/vendor/zendframework/zendframework/library/Zend/Mvc/Controller/AbstractController.php(117): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #7 /var/www/sismedical/Server/vendor/zendframework/zendframework/library/Zend/Mvc/DispatchListener.php(114): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response)) #8 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent)) #9 /var/www/sismedical/Server/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent)) #10 /var/www/sismedical/Server/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure)) #11 /var/www/sismedical/Server/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php(309): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
Прикрепление прослушивателя событий для прослушивания всех событий, вызванных всеми классами $sharedEvents->attach('*', '*', .. )
, вызовет это сообщение об ошибке.
Вы должны быть очень осторожны, к чему присоединяете слушателей, поскольку некоторые слушатели ожидают ответа (в этом случае логическое значение указывает, действительно ли сеанс действителен). Слушатель, который не был предназначен для обработки события, например прослушиватель журналов, обычно не возвращает ответ, который в этом случае рассматривается как сбой проверки.