无法重新生成会话ID zend框架2?

时间:2014-02-01 10:37:03

标签: php session zend-framework2 zfcuser

我在我的管理面板中使用了ZFcuser模块。当我登录管理面板时,其返回错误如下:

警告:session_regenerate_id():无法重新生成会话ID - 已在第260行的/home/public_html/dev/vendor/zendframework/zendframework/library/Zend/Session/SessionManager.php中发送的标头

这在我的本地Windows系统中工作正常,但在我的linux托管服务器上运行时会返回这样的警告。

需要帮助才能解决此问题。提前谢谢。

3 个答案:

答案 0 :(得分:6)

您可以使用ZF2 SessionManager

重新生成会话ID
$manager = new Zend\Session\SessionManager;
$manager->regenerateId();

但是,您的错误可能不是由此函数引起的,而是由于其他原因造成的。仅当您在该段代码之前未使用session_start()或类似内容时,才可以进行会话管理(echo或重新生成会话ID):

例如,这将失败:

<?php
echo 'Hello';
session_start();

另一方面,这只会起作用:

<?php
session_start();
echo 'Hello';

你必须非常小心打开和关闭php标签。如果您的类中有任何关闭的php标记,请将其删除。如果此后有空行,则将其解释为在响应中返回的文本,这会导致会话出现问题。这也会失败:

<?php
// Do some work
?>
<!-- blank line -->
<?php
session_start();
?>

所以:检查echoprint等所有代码。另外,检查源代码中的任何结束php标记。如果以上所有内容对您没有帮助,请在您重新生成会话ID的位置发布一段代码,这可能会提供更多见解。

答案 1 :(得分:2)

将某些字符转储到PHP标准输出时,通常会出现此错误。这导致将HTTP标头发送到Web浏览器,因此您无法再添加会话标头。

要解决此问题,请确保在开始会话之前没有echoprintf任何字符。还要确保您的PHP类文件没有结束?>标记。如果您的PHP类文件中的?>标记后面有一些字符,那么这些字符将被转储到stdout,从而破坏您的会话。

答案 2 :(得分:-2)

请检查以下

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));        
}