【发布时间】:2012-04-16 06:44:19
【问题描述】:
所以,我想在用户注销后保留一个特定的会话变量。像这样:
// 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"]) 和$_SESSION["foo"] = serialize($foo);。
【问题讨论】:
-
您声明您正在“重新启动会话”,但您是否启动过它? session_start() 不会自动启动。
-
Emm 不确定我是否在关注。该会话之前已启动,我结束它,然后使用
session_start()再次启动它。我不知道我是否可以在同一个脚本中做这两件事,这就是我问的原因 -
在调用 session_start() 之前有没有输出任何东西?这会干扰设置会话 cookie。检查你的标题。
-
@JohnDoe 那么,原因可能是矫枉过正?为什么不直接取消设置不需要的会话并(如果确实需要)重新生成会话 ID?你正在做的事情似乎非常具有破坏性。
-
DavidChan:不,我没有输出任何东西(除了我曾经用来检查变量中是否有任何东西的 var_dump)。 @Repox 我不知道,如果我不重新生成会话 ID,我认为这不会有什么不同。也许这是一个像 Michal 说的错误
标签: php http session session-variables