我收到了这个警告:
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
输出。但是,它没有......
答案 0 :(得分:1)
请参阅__destruct()
的PHP文档:http://php.net/manual/en/language.oop5.decon.php
在脚本关闭期间调用的析构函数具有HTTP标头 已发送。
session_regenerate_id()
尝试发送带有会话ID的cookie,但由于您在析构函数中调用它,因此标题已经发送 - 因此出现错误消息。
为什么需要重新生成会话ID?您的代码建议首先启动会话,生成ID,发送一些数据,然后在关闭之前重新生成会话ID。除非您有特定的理由,否则根本不需要这样做。