Ali*_*Ali 6 session zend-framework zend-session
嗨伙计们,我正在尝试使用Zend Sessions将会话存储在数据库中,但是因为某些原因,我的会话已经消失了.我不确定是否正在执行某些代码执行此操作或是否其他内容.
我注意到会话ID似乎在登录后的breif时间后重新生成.
即使在我的htaccess文件中添加了以下行,这甚至是:
php_value session.auto_start 0
Run Code Online (Sandbox Code Playgroud)
最终的结果是我登录时每分钟都会注销.
继承我的bootstrap文件中的代码
$config = array(
'name' => 'session',
'primary' => 'id',
'modifiedColumn' => 'modified',
'dataColumn' => 'data',
'lifetimeColumn' => 'lifetime'
);
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
Zend_Session::rememberMe($seconds = (60 * 60 * 24 * 30));
$saveHandler->setLifetime($seconds)->setOverrideLifetime(true);
Zend_Session::setSaveHandler($saveHandler);
//start your session!
Zend_Session::start();
Run Code Online (Sandbox Code Playgroud)
我没有使用任何其他会话相关的功能,除了登录时Zend_Auth.
Infact rememberme调用Session类的regenerateID函数 - 最终结果是我现在每隔几分钟就会不断注销.
我认为您可能遇到此问题,因为您在开始会话之前正在调用rememberMe.
你必须先启动会话,否则记住我不会做任何事情,因为它需要一个会话来设置rememberMe时间.
rememberMe调用regenerateId函数,Id的重新生成真正需要会话存在.
在会话开始后放置rememberMe调用,然后查看它是如何工作的.
如果那不是它,那么我不知道它可能是什么,因为我的代码看起来与你的相似.
你尝试过这样的事吗?
protected function _initSession() {
$config = array(
'name' => 'session',
'primary' => 'id',
'modifiedColumn' => 'modified',
'dataColumn' => 'data',
'lifetimeColumn' => 'lifetime',
'lifetime' => 60*60*24*30,
);
Zend_Session::setSaveHandler(new F_Session_SaveHandler_DbTable($config));
}
Run Code Online (Sandbox Code Playgroud)
这种方式在初始化数据库会话后没有设置生命周期,但它直接包含在初始化选项中 - 它适用于我,我认为没有理由为什么这应该在你的情况下失败:).