销毁PHP会话

时间:2012-05-18 07:36:45

标签: php security session destroy

stackoverflow上有很多关于destorying会话的页面。相信我,我一直在阅读它们,我偶然发现了这一点:Why does my session remain?

我的问题很简单,为了正确销毁会话,我是否真的需要做以下所有事情?

$tmp = session_id();
session_destroy();
session_id($tmp);
unset($tmp);

这是建议采取这种极端措施的唯一页面。大多数网页只是建议session_destroy();

只是为了澄清,因为似乎有一些混乱,我正在寻找最有效的方法。

提前致谢。

3 个答案:

答案 0 :(得分:2)

新的答案已经停止进入,所以我根据所有答案输入我学到的东西。这是各种答案的集合。希望它会帮助别人。下面列出了100%有效销毁会话的最有效方法:

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 = array();
$tmp = session_id();
session_id($tmp);
unset($tmp);
session_unset();
session_destroy();
session_write_close();
session_regenerate_id(True); // true indicates the need to delete the old session

感谢大家的帮助,告诉我如何做到这一点。这不是一个人的努力。我要特别感谢@Kerrek SB,@ Uday @Dhruvisha。如果您有更多建议,请随时添加评论,我将编辑我的答案。

答案 1 :(得分:1)

session_destroy()会销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie。要再次使用会话变量,必须调用session_start()。

为了完全终止会话,要将用户注销,还必须取消设置会话ID。如果使用cookie来传播会话ID(默认行为),则必须删除会话cookie。 setcookie()可以用于此。

示例使用$ _SESSION销毁会话     

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();
?>

有关详细信息,请参阅here

答案 2 :(得分:0)

<?php
session_start();
$s_id = session_id();
echo $s_id;


session_destroy();
session_unset();


session_start();
session_regenerate_id(true);
$s_id = session_id();

?>

试试这个。它会起作用。