Jeśli dobrze rozumiem, wszystko, co chcesz zrobić, to czy twoja sesja działa prawidłowo w twoich modułach? Zakładając, że to prawda, są dwa pojedyncze kroki.
1) Tworzenie config: module.config.php
return array(
'session' => array(
'remember_me_seconds' => 2419200,
'use_cookies' => true,
'cookie_httponly' => true,
),
);
2) Na dobry początek sesji: 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);
}
Znajdź więcej opcji w dokumentacji \Zend\Session\Config\SessionConfig
Jeśli chcesz przechowywać również pliki cookie, przejdź do strony this Question. Podziękowania dla Andreasa Lindena za jego wstępną odpowiedź - po prostu kopiuję wklejanie jego.
Dzięki, to zadziałało. Jako uwaga dla każdego, kto tego używa, rzuciłem to w mój moduł aplikacji (którego używam w większości mojej głównej konfiguracji) i upewniłem się, że zostało ono załadowane jako pierwsze. – dragonmantank
Czy mógłbyś wyjaśnić, jak ustawić ZF2 Session, aby była automatycznie niszczona za każdym razem, gdy zamykam przeglądarkę? Standardowym sposobem jest ustawienie 'cookie_lifetime = 0'. Ale z ZF2 to nie działa. Nie niszczy sesji przy zamknięciu przeglądarki. Również jeśli ustawię 'remember_me_seconds = 1' (zero zgłasza wyjątek) to też nie działa - wszystkie informacje bezpiecznie istnieją w sesji po zamknięciu przeglądarki. Jak ustawić taką opcję w ZF2? Dziękuję Ci. – Green
Jak rozumiem, nie należy używać statycznego setDefaultManager do przekazania menedżera do kontenera. Należy utworzyć instancję kontenera i wprowadzić menedżera za pomocą konstruktora lub użyć menedżera setManager. – markus