php 在析构函数中获取已发送的头

chhkpiq4  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(84)

我得到了这个警告:
警告:session_regenerate_id()[function.session-regenerate-id]:无法重新生成会话ID -标头已发送
但在此之前,我调用ob_start

测试脚本:

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

echo "Test";

SessionClass:

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

为什么我会看到这个错误?

fruv7luv

fruv7luv1#

参见__destruct()的PHP文档:http://php.net/manual/en/language.oop5.decon.php
在脚本关闭期间调用的析构函数已经发送了HTTP标头。
session_regenerate_id()尝试发送一个带有session id的cookie,但是因为你是在析构函数中调用它的,所以头文件已经发送了--因此出现了错误消息。
为什么需要重新生成会话ID?您的代码建议您首先启动一个会话,生成一个id,发送一些数据,然后在关闭它之前重新生成会话id。除非你有特别的理由,否则你根本不需要这样做。

相关问题