2012-10-08 16 views
10

Qual è il modo migliore per ottenere sessioni attive e in esecuzione in Zend Framework 2? Ho provato a impostare session_start() nel mio file index.php ma poi viene eseguito prima che tutti i caricatori automatici siano stati riavviati, portando a oggetti incompleti seduti nelle mie sessioni.Come eseguire il Bootstrap di sessioni in Zend Framework 2

In ZF1 è possibile inizializzare le sessioni aggiungendo alcune opzioni nella configurazione, ma non riesco a capire come farlo in ZF2.

risposta

27

Se ti capisco correttamente, tutto quello che vuoi è che la tua sessione funzioni correttamente nei tuoi moduli? Supponendo che sia corretto ci sono due passaggi singoli.

1) Creare la configurazione: module.config.php

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

2) iniziare la sessione: 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); 
} 

Trova più opzioni nella documentazione di \Zend\Session\Config\SessionConfig

Se si desidera memorizzare anche i cookie, vedere this Question. Crediti a Andreas Linden per la sua risposta iniziale - Sto semplicemente copiando il suo.

+1

Grazie, ha funzionato. Come nota per chiunque stia usando questo, l'ho buttato nel mio modulo Applicazione (che uso solo per la maggior parte della mia configurazione principale) e ho fatto in modo di caricarlo prima. – dragonmantank

+2

Potresti spiegare come impostare automaticamente la sessione ZF2 per essere distrutta ogni volta che chiudo il browser? Il modo standard è impostare 'cookie_lifetime = 0'. Ma con ZF2 non funziona. Non distrugge la sessione con la chiusura del browser. Inoltre, se imposto 'remember_me_seconds = 1' (zero genera un'eccezione), non funziona - tutte le informazioni sono presenti in modo sicuro nella sessione dopo aver chiuso il browser. Come impostare tale opzione in ZF2? Grazie. – Green

+0

A quanto ho capito, è sbagliato utilizzare il setDefaultManager statico per passare il gestore al contenitore. È necessario creare un'istanza del contenitore e iniettare il gestore tramite costruttore o utilizzare setManager. – markus

Problemi correlati