stackoverflow上有很多关于destorying会话的页面。相信我,我一直在阅读它们,我偶然发现了这一点:Why does my session remain?
我的问题很简单,为了正确销毁会话,我是否真的需要做以下所有事情?
$tmp = session_id();
session_destroy();
session_id($tmp);
unset($tmp);
这是建议采取这种极端措施的唯一页面。大多数网页只是建议session_destroy();
。
只是为了澄清,因为似乎有一些混乱,我正在寻找最有效的方法。
提前致谢。
答案 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();
?>
试试这个。它会起作用。