2012-10-08 66 views
10

¿Cuál es la mejor manera de obtener sesiones en funcionamiento en Zend Framework 2? Intenté configurar session_start() en mi archivo index.php, pero luego se ejecuta antes de que los cargadores automáticos se hayan iniciado, lo que genera objetos incompletos en mis sesiones.Cómo realizar sesiones Bootstrap en Zend Framework 2

En ZF1 podría hacer que inicialice sesiones agregando algunas opciones en la configuración, pero no sé cómo hacer esto en ZF2.

Respuesta

27

Si te entiendo correctamente, ¿todo lo que quieres hacer es que tu sesión funcione correctamente en tus módulos? Suponiendo que es correcto, hay dos pasos individuales.

1) Crear la configuración: module.config.php

return array(
    'session' => array(
     'remember_me_seconds' => 2419200, 
     'use_cookies' => true, 
     'cookie_httponly' => true, 
    ), 
); 

2) Iniciar la sesión: module.php

use Zend\Session\Config\SessionConfig; 
use Zend\Session\SessionManager; 
use Zend\Session\Container; 
use Zend\EventManager\EventInterface; 

public function onBootstrap(EventInterface $evm) 
{ 
    $config = $evm->getApplication() 
        ->getServiceManager() 
        ->get('Configuration'); 

    $sessionConfig = new SessionConfig(); 
    $sessionConfig->setOptions($config['session']); 
    $sessionManager = new SessionManager($sessionConfig); 
    $sessionManager->start(); 

    /** 
    * Optional: If you later want to use namespaces, you can already store the 
    * Manager in the shared (static) Container (=namespace) field 
    */ 
    Container::setDefaultManager($sessionManager); 
} 

Encuentra más opciones en la documentación de \Zend\Session\Config\SessionConfig

Si también desea almacenar cookies, consulte this Question. Créditos a Andreas Linden por su respuesta inicial: simplemente estoy copiando el suyo.

+1

Gracias, esto funcionó. Como nota para cualquier otra persona que use esto, lo tiré en mi módulo de Aplicación (que acabo de usar para la mayoría de mi configuración principal) y me aseguré de que se cargara primero. – dragonmantank

+2

¿Podría explicar cómo configurar ZF2 Session para que se destruya automáticamente cada vez que cierre el navegador? La forma estándar es establecer 'cookie_lifetime = 0'. Pero con ZF2 no funciona. No destruye la sesión con el navegador cerrado. Además, si configuro 'remember_me_seconds = 1' (cero arroja una excepción), tampoco funciona: toda la información existe de manera segura en la sesión después de cerrar el navegador. ¿Cómo establecer una opción de este tipo en ZF2? Gracias. – Green

+0

Según tengo entendido, es incorrecto usar el setDefaultManager estático para pasar el administrador al contenedor. Debería crear una instancia del contenedor e inyectar el administrador a través del constructor o usar setManager. – markus

Cuestiones relacionadas