2

我将 ZFcuser 模块用于我的管理面板。当我登录到管理面板时,它会返回如下错误:

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

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

需要帮助来解决这个问题。提前致谢。

4

3 回答 3

6

您可以使用 ZF2 重新生成会话 ID SessionManager

$manager = new Zend\Session\SessionManager;
$manager->regenerateId();

但是,您的错误可能不是由此功能引起的,而是由于其他原因引起的。会话管理(session_start()或重新生成会话 id)只有在您没有使用echo该代码之前或类似的东西时才有可能:

例如,这将失败:

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

另一方面,这将起作用:

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

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

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

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

于 2014-03-05T13:48:41.917 回答
2

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

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

于 2014-02-01T21:13:43.050 回答
-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));        
}
于 2014-03-05T13:50:54.597 回答