大家好,我正在尝试使用Zend Sessions将会话存储在数据库中,但是因为某些原因我的会话已经消失了。我不确定是否正在执行某些代码执行此操作或其他内容。
我注意到会话ID似乎在登录后的breif时间后重新生成。
即使在我的htaccess文件中添加了以下行,也是如此:
php_value session.auto_start 0
最终结果是我每登录一次都会注销。
在我的引导程序文件中显示我的代码
$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();
我没有使用任何其他与会话相关的功能,除了登录时Zend_Auth。
Infact rememberme
调用Session类的regenerateID函数 - 最终结果是我每隔几分钟就会经常注销。
答案 0 :(得分:5)
我认为您可能遇到此问题,因为您在开始会话之前调用了rememberMe。
你必须先启动会话,否则记住我不会做任何事情,因为它需要一个会话来设置rememberMe时间。
rememberMe调用regenerateId函数,Id的重新生成真正需要会话存在。
在会话开始后放置rememberMe调用,然后查看它是如何工作的。
如果不是,那么我不知道它是什么,因为我的代码与你的代码相似。
答案 1 :(得分:5)
你尝试过这样的事吗?
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));
}
这种方式在初始化数据库会话后没有设置生命周期,但它直接包含在初始化选项中 - 它适用于我,我认为没有理由为什么在你的情况下会失败:)。
答案 2 :(得分:2)
我认为您需要在引导代码
之后查看以下值session.gc_maxlifetime
session.cookie_lifetime
答案 3 :(得分:1)
我遇到了这个问题,因为我的数据库表中的主要ID设置为INT(11)(IDIOT!)
Duplicate DB sessions created upon Zend_Auth login
应该设置为CHAR(32)!我出于习惯将它设置为INT。我花了4天时间追踪这个。
答案 4 :(得分:0)
如果您在* .ini配置文件中配置会话资源,请检查 resources.session.cookie_domain 参数。 我记得这件事时花了3个小时。