我是ZF2的新手,并不习惯如何做事.我想使用会话来跟踪用户(记住我).我在我班级的一部分有这个代码:
$sessionManager = new \Zend\Session\SessionManager(); $sessionManager->rememberMe($time); // i want to keep track of my user id too $populateStorage = array('user_id' => $user->getId()); $storage = new ArrayStorage($populateStorage); $sessionManager->setStorage($storage);
好的,到目前为止一切顺利.当我尝试:
var_dump($sessionManager->getStorage());
我得到了预期的数据.
在我的程序的另一部分,我想再次检索我的数据(有点像容器):
$sessionManager = new \Zend\Session\SessionManager(); var_dump($sessionManager->getStorage());
这只返回一个空对象.我想这是由于"新",我认为我必须以不同的方式实现SessionManager,但是如何?我不知道.这就是我提出的:
在我的模块中,我现在有:
public function onBootstrap(\Zend\Mvc\MvcEvent $e) { $config = $e->getApplication() ->getServiceManager() ->get('Configuration'); $sessionConfig = new SessionConfig(); $sessionConfig->setOptions($config['session']); $sessionManager = new SessionManager($sessionConfig); $sessionManager->start();
在我的module.config中:
'session' => array( 'remember_me_seconds' => 2419200, 'use_cookies' => true, 'cookie_httponly' => true, ),
但是怎么办呢?如何获取sessionManager的实例?
没有详细记录的SessionManagerFactory(zf2 api doc)和SessionConfigFactory(zf2 api doc).使用这些实例化SessionManager非常简单,只需将这些工厂放入ServiceManager配置:
'service_manager' => [ 'factories' => [ 'Zend\Session\SessionManager' => 'Zend\Session\Service\SessionManagerFactory', 'Zend\Session\Config\ConfigInterface' => 'Zend\Session\Service\SessionConfigFactory', ], ],
和模块配置在session_config键下放置会话选项:
'session_config' => [ 'remember_me_seconds' => 2419200, 'use_cookies' => true, 'cookie_httponly' => true, ],
就是这样,现在你可以从任何地方的服务定位器中获取SessionManager,例如在控制器中:
/** @var Zend\Session\SessionManager $sm */ $sessionManager = $this->serviceLocator->get('Zend\Session\SessionManager');
这是从2.2版本的Zend Framework(相关拉取请求)开始提供的.