2

所以,我想在用户注销后保留一个特定的会话变量。像这样:

// Save the session variable
$foo = $_SESSION["foo"];

// Terminate the session
//----------------------------------------------
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), "", time() - 3600,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

session_destroy();
session_regenerate_id();
//----------------------------------------------

// Restart the session
session_start();

// Store the variable in the session
$_SESSION["foo"] = $foo;

// Redirect the user to the same page, this time unauthenticated
header("Location: " . $_SERVER["REQUEST_URI"]);

但它似乎没有被正确存储,因为在重定向之后,$_SESSION["foo"]它是空的。

谁能帮我这个?我在这里做一些“非法”的事情吗?

笔记:

如果我在重定向之前var_dump($_SESSION["foo"])这样做,它确实会返回变量。

当然,我总是session_start()在取回之前打电话$_SESSION["foo"]

另外,我不知道这是否有关系,但$foo它是一个对象,所以我在做$foo = unserialize($_SESSION["foo"])and $_SESSION["foo"] = serialize($foo);

4

1 回答 1

2

根据您使用的 PHP 版本,这可能可以解释问题https://bugs.php.net/bug.php?id=38042

会话销毁后跟会话开始似乎不再启动新会话。附加代码适用于 5.1.2,但在 5.1.4 上失败。

也许其他版本也可能受到影响。

这篇文章还描述了您遇到的行为:

您可能的解决方法可能是将变量作为位置标头中$foo的参数传递给您的下一个脚本,如下所示:$_GET

header("Location: " . $_SERVER["REQUEST_URI"] . "?foo=" . $foo);
于 2012-04-16T06:53:56.857 回答