-2

我收到这个警告:

Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id - headers already sent

但我做的第一件事实际上是ob_start..

测试脚本:

ob_start();
$session = new SessionClass();

echo "Test";

会话类:

function __destruct() {
    session_regenerate_id(true);
    session_write_close();
}

至少,类的构造函数

    session_set_save_handler(array(__CLASS__, '_open'),
                             array(__CLASS__, '_close'),
                             array(__CLASS__, '_read'),
                             array(__CLASS__, '_write'),
                             array(__CLASS__, '_destroy'),
                             array(__CLASS__, '_gc'));
    session_name($sessionName);
    session_start();

测试脚本应该对“测试”JSON进行输出。ECHO但是,它不...

4

1 回答 1

1

请参阅 PHP 文档__destruct(): http: //php.net/manual/en/language.oop5.decon.php

在脚本关闭期间调用的析构函数已经发送了 HTTP 标头。

session_regenerate_id()尝试发送带有会话 ID 的 cookie,但由于您在析构函数中调用它,因此标头已发送 - 因此出现错误消息。

为什么需要重新生成会话 ID?您的代码建议您首先启动一个会话,生成一个 id,发送一些数据,然后在关闭之前重新生成会话 id。除非您对此有特定原因,否则您根本不需要这样做。

于 2013-09-27T12:49:23.453 回答