Skip to main content

Session validation failed en Laminas

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í.