Zend Framework - 会话ID重新生成,无法保持登录状态

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函数 - 最终结果是我现在每隔几分钟就会不断注销.

Jer*_*via 5

我认为您可能遇到此问题,因为您在开始会话之前正在调用rememberMe.

你必须先启动会话,否则记住我不会做任何事情,因为它需要一个会话来设置rememberMe时间.

rememberMe调用regenerateId函数,Id的重新生成真正需要会话存在.

在会话开始后放置rememberMe调用,然后查看它是如何工作的.

如果那不是它,那么我不知道它可能是什么,因为我的代码看起来与你的相似.


min*_*gos 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));        
}
Run Code Online (Sandbox Code Playgroud)

这种方式在初始化数据库会话后没有设置生命周期,但它直接包含在初始化选项中 - 它适用于我,我认为没有理由为什么这应该在你的情况下失败:).