PHP session 序列化对象

标签 php php-7

我发现了很多关于 PHP 5.4 及以下版本的 session 序列化的信息,但关于 PHP 7 的信息并不多。几年前,有人建议我使用 $_SESSION['var'] = serialize($ object); 存储类变量时 (class object { public $value; function __construct() { $this->value = new object2(); }})。

今天,我将代码从一种开发环境转换到另一种开发环境。新的似乎不喜欢 = serialize($object); 但似乎对 = $object 没问题。

几周前,我遇到了一些帖子,其中提到 PHP 总是在将变量放入 session 之前序列化变量,自从这次事件(在今天的搜索期间)以来,我发现了许多相同的帖子。

在 PHP 文档中,我提到了 session_register(),它显然应该用于在 session 变量中存储对象...但它显然在 5.3 中已停止使用。

之前的测试告诉我,在不首先序列化 session 变量的情况下为 session 变量分配类变量似乎不能很好地跟踪类变量,特别是在像上面这样的特殊情况下,其中一个变量是另一个类变量(object2)。

我遇到的问题似乎是偶然的,事实上,这就是我寻找答案并发现序列化的原因,一旦我添加了序列化/反序列化(并且没有其他更改),一切都正常工作有意为之。

所以,这是我的问题:处理 PHP session 对象序列化的“真正”方法是什么?

$_SESSION['var'] = serialize($object); 导致 500 错误。 $_SESSION['var'] = $object 没有错误,但由于之前的问题,我不确定它的工作效果如何。

在讨论这个主题时,反序列化的最佳方法是什么? $object = unserialize($_SESSION['var']); 是我当前的方法。它不会导致错误,但为了可能的微小优化和 future 的知识,不妨覆盖基础。

如果我的方法(使用serialize()unserialize())是正确的,什么设置会导致serialize()失败?

如果这里的任何“代码”片段中有任何拼写错误,我都是在帖子中内联编写的,所以请忽略它们。

最佳答案

您可以像任何其他值一样将对象保存在 session 中。在脚本结束时, session 得到 serialized and saved无论如何:

When PHP shuts down, it will automatically take the contents of the $_SESSION superglobal, serialize it, and send it for storage using the session save handler.

“主要”问题是,要再次加载 session ,您尝试加载的对象的类定义必须在使用session_start();之前可用/加载。称呼。除此之外,一切都应该正常工作。

对于 500 服务器错误,您必须检查错误消息和/或错误日志问题是什么。

关于PHP session 序列化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47246489/

相关文章:

php - Laravel 5.4 如何通过表单请求为用户分配角色?

php - 在 PHP7 中原生分析多个脚本

php - 如何在 php 7.1 中指示返回类型是当前子类型?

php - 不重复地从MySQL表中选择

php - Laravel-5 合并多级表单数组验证

php - 如何正确安装LAMP软件包?

php - 在 App Engine 灵活的 PHP 7.0 上连接到第二代 Cloud SQL - 缺少套接字

php - Laravel Artisan 使用内存挂起直至卡住

session 开始() : Session callback expects true/false return value in

php - 并排显示图像 php 和 css