会话类警告

时间:2013-09-27 12:40:16

标签: php class

我收到了这个警告:

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

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

测试脚本:

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

echo "Test";

SessionClass:

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

至少Ans,类的构造函数

    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输出。但是,它没有......

1 个答案:

答案 0 :(得分:1)

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

  

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

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

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