会话耗尽自己的甜蜜时光被摧毁

时间:2011-11-02 13:47:54

标签: php

我创建了一个用户页面,其中包含一个包含注销按钮的菜单。单击该按钮后,将使用以下代码将用户定向到注销页面:

session_start();
session_destroy();

include("/var/www/include/header.inc");
echo "<h>Logout Success</h>";
include("/var/www/include/menu.inc");
include("/var/www/include/footer.inc");

menu.inc 文件中的代码编写为:

if(@$_SESSION['login'] == "yes")
{
 // show expanded menu
}
else
{
 // show normal menu
}

退出后我现在看到的是扩展菜单。看起来菜单被包含得比会话被破坏的速度快,从而产生了用户仍然登录的印象。有没有办法避免这种情况?

3 个答案:

答案 0 :(得分:1)

  

session_destroy()销毁与当前会话相关的所有数据。 它不会取消设置与会话相关的任何全局变量,也不会取消设置会话Cookie。

Source

答案 1 :(得分:1)

session_destroy没有取消设置$ _SESSION数组,因此session_destroy之后的页面的其余部分仍会看到它。你可以试试这个

session_destroy(); 
unset($_SESSION);

答案 2 :(得分:0)

要完全清除所有会话数据,您必须使用与

类似的内容
<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// 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();
?>

这在PHP手册中有解释:

  

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

     

为了完全杀死会话,喜欢将用户注销掉,   会话ID也必须取消设置。如果使用cookie来传播   会话ID(默认行为),然后会话cookie必须是   删除。 setcookie()可以用于此。