2011-04-22 57 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. 

这可以让你写出更好,更高效,更灵活的会话管理代码。