session_start();
$_SESSION['user'] = "789456";
$_SESSION['name'] = "dummy";
$_SESSION['id'] = "123";
print_r($_SESSION);
session_destroy();
echo "Session End";
print_r($_SESSION);
我的输出是:
Array ( [user] => 789456 [name] => dummy [id] => 123)
Session End :Array ( [user] => 789456 [name] => dummy [id] => 123)
输出不应该是:
Array ( [user] => 789456 [name] => dummy [id] => 123)
如果我在session_unset()
之前使用session_destroy()
,那么我会得到我期望的结果。是否始终需要在session_unset()
之前使用session_destroy()
?
答案 0 :(得分:4)
session_destroy()会销毁与当前会话关联的所有数据。 它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie。要再次使用会话变量,必须调用session_start()。
为了完全终止会话,要将用户注销,还必须取消设置会话ID。如果使用cookie来传播会话ID(默认行为),则必须删除会话cookie。 setcookie()可以用于此。
最简单的方法是:$_SESSION = array();
后调用session_destroy();
。
答案 1 :(得分:1)
http://php.net/session_destroy
session_destroy()会销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话cookie。要再次使用会话变量,必须调用session_start()。
为了完全终止会话,要将用户注销,还必须取消设置会话ID。如果使用cookie来传播会话ID(默认行为),则必须删除会话cookie。 setcookie()可以用于此。
session_destroy擦除底层存储中的数据,但它只留下$ _SESSION。刷新页面时,它将为空。
然而,你可以做的只是做$ _SESSION = array(); session_destroy(); (虽然这几乎是多余的,因为session_destroy擦除了底层数据,但保持了相同的会话ID - 这两个语句基本相同)