1

stackoverflow 上有很多关于 destorying session 的页面。相信我,我一直在阅读它们并且我遇到了这个问题:为什么我的会话仍然存在?

我的问题很简单,我真的需要执行以下所有操作才能正确销毁会话吗?

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

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

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

提前致谢。

4

3 回答 3

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。如果您有更多建议,请随时添加评论,我将编辑我的答案。

于 2012-05-19T03:24:30.143 回答
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();
?>

请参阅此处了解更多详情。

于 2012-05-18T13:37:40.557 回答
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();

?>

试试这个 。它会起作用的。

于 2012-05-18T07:46:19.250 回答