gpt4 book ai didi

php - 意外丢失 session 数据

转载 作者:可可西里 更新时间:2023-11-01 16:34:40 27 4
gpt4 key购买 nike

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

// 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["foo"] 之前调用 session_start()

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

最佳答案

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

Session destroy followed by session start appears to no longer start a new session. The attached code works on 5.1.2 but fails on 5.1.4.

也许其他版本也会受到影响。

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

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

header("Location: " . $_SERVER["REQUEST_URI"] . "?foo=" . $foo);

关于php - 意外丢失 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10169735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com