gpt4 book ai didi

php - 在 PHP session 中存储对象

转载 作者:IT王子 更新时间:2023-10-29 01:11:59 26 4
gpt4 key购买 nike

PHP 文档说“您不能在 session 变量中使用引用,因为没有可行的方法来恢复对另一个变量的引用。”

这是否意味着我不能拥有类似的东西:

session_start();
$user = new User;
$user->name = 'blah';
$_SESSION['user'] = $user;

我尝试在 session 中存储一个简单的字符串和一个用户对象,该字符串始终在页面之间或页面刷新后持续存在。但是,用户变量在 $_SESSION 中丢失(变为空)。

有什么想法吗?

编辑:我已经确认 session_id 在所有这些页面/子页面中都是相同的,在页面刷新之前和之后。

编辑:奇怪的是,在我尝试了下面的序列化和反序列化方法之后, session 中的序列化用户对象(或字符串)仍然消失了!

编辑:最后我弄清楚了这个错误是什么,看起来 $_SESSION['user'] 被某种神秘的力量覆盖了,如果我使用除 'user' 之外的任何变量,那么一切都很好。当您将对象放入 $_SESSION 时,PHP(至少 5.3 是我正在使用的版本)会自动序列化和反序列化。

session_start();
$user = new User();
$user->name = 'blah'
$_SESSION['myuser'] = $user;

最佳答案

您需要使用 magic __sleep and __wakeup methods用于 PHP 5 对象。

例如在下面的代码块中:

$obj = new Object();

$_SESSION['obj'] = serialize($obj);

$obj = unserialize($_SESSION['obj']);

__sleep 由 serialize() 调用。 sleep 方法将从您要保留的对象中返回一组值。

__wakeup 由 unserialize() 调用。唤醒方法应该采用未序列化的值并在对象中初始化它们。

关于php - 在 PHP session 中存储对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1442177/

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