-2
function killsession()
{
  //  global $_SESSION;
    $_SESSION = array();
    if (session_id() != "" || isset($_COOKIE[session_name()])) {
        setcookie(session_name(), '', time() - 42000, '/');
    }
    session_unset();
    session_destroy();
    header("Location: "index");

}

任何想法为什么在我运行此功能后 $_SESSION['userid'] 仍然存在?我真的保持登录状态。

会话名称和 start() 设置在每个页面的顶部。

4

2 回答 2

2

PHP session_destroy()手册中所述:

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

为了完全终止会话,例如注销用户,还必须取消设置会话 ID。如果使用 cookie 传播会话 id(默认行为),则必须删除会话 cookie。setcookie()可以用于此。

直接来自 PHP 手册的示例:

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

将此示例应用于您的函数:

function killsession()
{
  // start the session, if started before, comment
  session_start();

  // Unset all of the session variables. 
  $_SESSION = array();

  // 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"]
    );
  }

  // destroy the session.
  session_destroy();

  // direct user
  header("Location: index.php");
}

考虑这两个会话变量:

$_SESSION['userid']=25;
$_SESSION['userName']='Super BuBu';

的输出print_r($_SESSION);将是:

Array ( [userid] => 25 [userName] => Super BuBu )

调用该killsession()函数后,输出将是:

Array ( );

请参阅此工作示例。由于print_rsession交互执行了先前的输出和标头,因此假设错误出现在此环境中。

于 2012-06-14T23:13:25.987 回答
0

试一试

 function killsession() {
     unset($_SESSION['userid']);
     session_destroy();
     header("Location: "index");

 }
于 2012-06-14T22:21:36.473 回答