我是ZF2的新手,还不太习惯如何做东西。我想使用 session 来跟踪用户(记住我)。我在类(class)的一部分中有这段代码:
$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());
这只会返回一个空对象。
我想这是由于"new"而引起的,我想我必须以不同的方式实现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 选项放在session_config键下:
'session_config' => [
'remember_me_seconds' => 2419200,
'use_cookies' => true,
'cookie_httponly' => true,
],
就是这样,现在您可以从任何地方的服务定位器中获取SessionManager,例如在 Controller 中:
/** @var Zend\Session\SessionManager $sm */
$sessionManager = $this->serviceLocator->get('Zend\Session\SessionManager');
从Zend Framework的2.2版本(related pull request)开始可用。
关于php - ZF2 SessionManager的用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20639289/