所以,我想在用户注销后保留一个特定的会话变量。像这样:
// 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"]
为空。
任何人都可以帮我吗?我做了什么'非法'这里吗?
注:
如果我在重定向之前{i}} ,那么它会返回变量。
当然,在我找回var_dump($_SESSION["foo"])
之前,我总是打电话给session_start()
。
此外,我不知道这是否有事可做,但$_SESSION["foo"]
是一个对象,所以我正在做$foo
和$foo = unserialize($_SESSION["foo"])
。< / p>
答案 0 :(得分: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);