每页加载ZF3会话为空

时间:2017-12-28 21:19:33

标签: php session zend-framework3 zend-session

在ZF3中,我正在初始化我的会话如下:

配置/自动加载/ global.php

'session_config' => [
    'name' => 'gintra3',
    'cookie_lifetime' => 60*60*1,
    'gc_maxlifetime'     => 60*60*24*30,
],
'session_storage' => [
    'type' => Zend\Session\Storage\ArrayStorage::class,
],
'session_manager' => [
    'storage' => Zend\Session\Storage\SessionArrayStorage::class,
    'validators' => [
        Zend\Session\Validator\RemoteAddr::class,
        Zend\Session\Validator\HttpUserAgent::class,
    ],
],

模块/应用程序/ Module.php

$sessionManager = $e->getApplication()->getServiceManager()->get(SessionManager::class);
$sessionTableGateway = new TableGateway('session',$e->getApplication()->getServiceManager()->get('Zend\Db\Adapter\Adapter'));
$sessionSaveHandler = new DbTableGateway($sessionTableGateway,new DbTableGatewayOptions());
$sessionManager->setSaveHandler($sessionSaveHandler);

现在,当我在第1页上存储这样的数据时:

$sessionC = new Container('test');
$sessionC->testVariable = "helloWorld";

并在第2页上检索它:

$sessionC = new Container('test');
Debug::dump($sessionC->testVariable);

我在第2页上得到了一个输出:

vendor/zendframework/zend-debug/src/Debug.php:97:null

当我检查数据库表时,相应session_id的'data'列在加载第1页后包含“helloWorld”。加载第2页后,它不再包含“helloWorld”。

如果我在Module.php中注释掉所有与会话相关的行,则会在页面加载时创建PHPSESSID cookie,并且会话数据保存和存储现在可以正常工作。

如果我使用DbTableGateway作为save_handler或只使用标准的save_handler,则无关紧要。两种情况都会出现问题。

使用我的个人会话存储时,由于在页面加载时丢失所有会话数据的相同机制,FlashMessenger和Csrf-Form-Validation也会停止工作。

我的问题在哪里?我在监督什么? 非常感谢你的一些想法。

0 个答案:

没有答案