Desarrollando el módulo de Authentication en Laminas me encontré con el siguiente problema.
Error:
Laminas\ServiceManager\Exception\ServiceNotCreatedException
Message:
Service with name «Laminas\Authentication\AuthenticationService» could not be created. Reason: Session validation failded
Solución
La solución que he realizando es la siguiente:
Compruebo que en el fichero de config/autoload/global.php esta la siguiente configuración:
...
'session_manager' => [
// Session validators (used for security).
'validators' => [
RemoteAddr::class,
HttpUserAgent::class,
]
],
...
En mi caso me dirijo a la función onBootstrap (Module.php) de módulo que estoy implementando para forzar el inicio de sessión.
use Laminas\Session\SessionManager;
public function onBootstrap(MvcEvent $event) {
...
$application = $event->getApplication();
$serviceManager = $application->getServiceManager();
$sessionManager = $serviceManager->get(SessionManager::class);
$this->forgetInvalidSession($sessionManager);
...
}
protected function forgetInvalidSession($sessionManager) {
try {
$sessionManager->start();
return;
} catch (\Exception $e) {}
/**
* Session validation failed: toast it and carry on.
*/
// @codeCoverageIgnoreStart
session_unset();
// @codeCoverageIgnoreEnd
}
Con la función forgetInvalidSession conseguiremos iniciar la sessión y sino es válida, la eliminaremos con session_unset();
Espero que os sea útil.
La solución la pude encontrar en el aquí.