2010-11-11 83 views
3

我试图注销我的页面,但session_destroy和设置cookie不起作用。这里是我的代码:session_destroy()和setcookie失败

$page = $_GET["page"]; 
    if ($page == "logout") { 
if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
     $params["path"], $params["domain"], 
     $params["secure"], $params["httponly"] 
    ); 
} 

session_destroy(); 


echo <<<html 
     <br /><br /><br /><p align="center"><b><font color="#000080">You've successfully logged out.</font></b></p> 
     <p align="right"><b><font size="3" color="#FF0000">Redirecting...</font></b></td> 
html; 
echo ("<META HTTP-EQUIV=Refresh CONTENT=\"4; URL=index.php\">"); 
exit(); 

但它不工作 - 会话不会破坏,cookie保持不变。我也尝试将cookie设置为不同的值,但没有成功。代码的其他部分创建cookie,访问和使用它们,但在注销部分我不能销毁它们。有人能告诉我这里有什么问题吗?应该在session_start之类的页面开始处设置/取消设置/销毁Cookie和会话?或者是其他错误?

+0

这是您的完整输出吗? – 2010-11-11 10:48:27

回答

4

必须在您的脚本生成任何输出之前调用setcookie(),因为它会影响在实际响应之前发送给客户端的标头。

您发布的代码片段看起来像在发布的代码被调用之前回显了一些内容(输出字符串不包含开始的html标记)。所以确保你的代码放在任何输出被回显之前,但是在session_start()被调用之后,它应该工作。

+0

我认为有一些与此有关..我只是不想在我有另一个人的意见之前乱搞脚本。 – DreamWave 2010-11-11 10:52:12

1

您必须在session_destroy()之前调用session_start(),因为session_destroy在当前会话上运行,如果您尚未调用会话启动,则不存在该会话。

+0

是的我有session.start()和session.auto_start在这个问题上的php.ini .. – DreamWave 2010-11-11 10:52:37

1

该页面是否有session_start()之前session_destroy()?它需要。

+1

为什么downvote?这个信息是正确的http://php.net/session_destroy – Treffynnon 2010-11-11 10:40:21

+0

是的我有session_start()和session.auto_start在php.ini这个事情.. – DreamWave 2010-11-11 10:50:21

0

如果我们不叫

在session_start()

在页面的开始,我们不能有会话变量到页面上进行操作。

+0

是的我有session_start()和session.auto_start在php.ini物.. – DreamWave 2010-11-11 10:51:10