session_destroy()和setcookie失败

时间:2010-11-11 10:13:47

标签: php

我正在尝试注销我的页面但是session_destroy和设置cookie不起作用。这是我的代码:

    $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,访问和使用它们,但在注销部分我不能销毁它们。谁能告诉我这里有什么问题?是否应该在页面开头设置/取消设置/销毁cookie和会话,如session_start?或者是其他错误?

4 个答案:

答案 0 :(得分:4)

必须在脚本生成任何输出之前调用

setcookie(),因为这会影响在实际响应之前发送到客户端的标头。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果我们不打电话

  

在session_start()

在页面的开头,我们不能让会话变量在该页面上运行。