我是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/

10-12 00:06