2013-09-27 114 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()'函數,這使它工作。謝謝! –