0

我正在尝试使用 DbTableGateway 将我的会话信息存储在 MySQL 数据库中——但我的“会话”表仍然是空的。它从不包含任何行。这是我的代码(或多或少从这里复制/粘贴):

$dbAdapter = new Zend\Db\Adapter\Adapter(array(
    'driver' => 'pdo_mysql',
    'database' => 'db-name',
    'username' => 'username',
    'password' => 'password!'
));
$tableGateway = new \Zend\Db\TableGateway\TableGateway('session', $dbAdapter);
$saveHandler = new \Zend\Session\SaveHandler\DbTableGateway($tableGateway, new \Zend\Session\SaveHandler\DbTableGatewayOptions());
$manager = new \Zend\Session\SessionManager();
$manager->setSaveHandler($saveHandler);

$someContainer = new Container('SomeSessionNamespace');
$someContainer->aBitOfData = 'tasty morsel of data';

这是我使用此代码的视频演示:http: //screencast.com/t/UDDUs6OZOib

正如您在视频中看到的,会话信息在请求之间保留,但并未存储在数据库中。

我在 中的每个函数都添加了断点Zend\Session\SaveHandler\DbTableGateway,唯一受到影响的是 __constructor。所以构造函数被调用,但显然它永远不会被用于其他任何事情。

我错过了什么?

我在 PHP 5.3 上使用 Zend Framework 2.2.2。

-乔什

4

2 回答 2

1

如果您需要快速实施,我发现了一些模块可以做到这一点

  1. https://github.com/Nitecon/DBSessionStorage
  2. https://github.com/gabriel403/G403SessionDb

要使用您当前的代码,请检查:

  • ** DbTableGatewayOptions** 的选项(id、数据、生命周期等)

    $options = new \Zend\Session\SaveHandler\DbTableGatewayOptions();
    $options->setDataColumn('data');
    $options->setIdColumn('id');
    $options->setLifetimeColumn('lifetime');
    $options->setNameColumn('name');
    $options->setModifiedColumn('modified');
    
  • 你的开始 SessionManager $manager->start();

于 2013-08-02T03:15:57.653 回答
1

检查 application.config.php 并确保 Application 模块位于顶层

还要确保是否添加了 in 'vendor/composer/autoload_namespaces.php''vendor/composer/autoload_static.php' zend 和 zendxml 库路径

例如:'Zend' => array(vendorDir . '/ZF2/library'), 'ZendXml' => array(vendorDir . '/ZF2/library')

于 2017-08-10T12:35:17.320 回答