即使使用session_destroy(),会话变量也不会被破坏

时间:2012-04-02 06:11:26

标签: php session-variables

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()

2 个答案:

答案 0 :(得分:4)

来自documentation

  

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 - 这两个语句基本相同)