2011-04-22 61 views
2

我試着去解決我的登錄腳本,在我的本地它的工作原理,但上傳到我的在線測試服務器,註銷壞了,我得到這個錯誤:警告:session_destroy()?

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in htdocs/logout.php on line 17 

Warning: Cannot modify header information - headers already sent by (output started at htdocs/logout.php:17) in htdocs/logout.php on line 18 

Warning: Cannot modify header information - headers already sent by (output started at htdocs/logout.php:17) in www/htdocs/logout.php on line 34 

不太清楚這可能是造成它,因爲它在我的本地主機上工作,有什麼想法?

+0

你可以顯示logout.php的代碼嗎? – 2011-04-22 06:32:00

+0

session_destroy之前有沒有輸出? 另外,什麼是localhost中的PHP報告級別。如果它被設置爲忽略警告,那麼它只是不顯示這些消息。 – 2011-04-22 06:33:13

+0

得到它們傢伙謝謝。 – aph107 2011-04-22 06:39:22

回答

11
session_start(); 
session_destroy(); /*or sesion_unset();*/ 
+0

這工作:)謝謝,爲什麼它會在我的本地主機甚至沒有'session_start()'工作的任何原因? – aph107 2011-04-22 06:37:32

+0

也許你已經使用error_reporting(0)強制隱藏錯誤或在PHP.INI中設置爲在所有頁面中自動啓動會話!或者已經包括一個你已經開始會話的頁面! – Sourav 2011-04-22 06:39:58

+0

得到它謝謝:)順便說一句,我看到你的超光論壇鏈接,你有一個錯字,它說「可以回覆uther的話題。」 **作者 – aph107 2011-04-22 06:42:04

6

對於session_destroy工作,會話必須開始使用session_start

+0

這工作:)謝謝,爲什麼它會工作在我的本地主機甚至沒有'session_start()'? ? – aph107 2011-04-22 06:38:49

+0

你也可以使用session.auto_start配置指令 – Wes 2011-04-22 06:53:11

3

如果您只是需要刪除會話如果存在(例如,在所謂的退出/註銷/析構函數腳本自動),它可能會或可能不存在,那麼你可以使用session_status檢查狀態。

由於PHP 5.4.0,你可以檢查它像這樣:

if(session_status() == PHP_SESSION_ACTIVE) 
{ 
    session_destroy(); 
} 

這是最好創建一個新的部分只是後來摧毀它。

每PHP手冊,session_status將返回可以用下面的常量進行比較的整數

Return Values 

• PHP_SESSION_DISABLED - Returned if sessions are disabled. 
• PHP_SESSION_NONE - Returned if sessions are enabled, but none exists. 
• PHP_SESSION_ACTIVE - Returned if sessions are enabled, and one exists. 

這可以讓你寫出更好,更高效,更靈活的會話管理代碼。