2013-09-27 74 views
-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"; 

SessionClass:

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(); 

测试脚本ECHO “测试” 做一个输出到JSON。但是,它不...

+0

输出从哪里开始? –

+0

@deceze它不是真的重复。无论如何,找到答案。 –

回答

1

查看PHP文档为__destruct()http://php.net/manual/en/language.oop5.decon.php

析构函数在脚本关闭时调用有HTTP标头 已经发出。

session_regenerate_id()尝试发送一个带有会话ID的cookie,但由于您在析构函数中调用它,所以头文件已经发送 - 因此是错误消息。

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

+0

通过你的信息,我发现了关于'ob_flush()'函数,这使它工作。谢谢! –