【问题标题】:PHP Storing a Class in sessionPHP在会话中存储一个类
【发布时间】:2014-07-23 16:52:15
【问题描述】:

我已经搜索和搜索并找到了大量示例,但似乎每个人对如何以及何时使用 session 有不同的看法,有些人使用它,有些人说它是邪恶的......

这是我的用例。

我有一个类,它有几个变量,需要在我的应用程序的每个页面上使用。这些变量值是通过对我正在使用的 API 进行 SOAP 调用来设置的。 SOAP 调用相对较快,但我试图了解如何避免在每个页面上调用 API。我更愿意打一次电话,然后在某处“存储”这些值。

我想我会在一些说 Init.php 页面上创建我的类的实例,进行 SOAP 调用,然后将整个类存储在会话中。然后在我的所有页面上都包含 Init.php 页面。在该页面中,我会检查该类是否存在于会话中,如果存在,则将其从会话中拉出。

我知道我必须对类进行序列化\反序列化才能做到这一点,但我正在这里寻找一些关于天气的反馈,这是满足此用例的正确方法,或者是否有更好的选择?

我对 PHP 有点陌生,主要是 .NET 人,而在 .NET 中,会话通常是最好的前进方式。

感谢所有输入。

谢谢

【问题讨论】:

  • 我不会存储课程。我会将必要的值放在一个数组中,将其编码为 JSON 并将 JSON 存储在会话中。如果您存储该类,您也将存储它的所有方法,这似乎是太多的开销。您还可以查看本地存储。
  • 您能否给我们一个您想要存储的数据的示例,以便我们更好地了解最好的方法?
  • @Jay 序列化一个类的实例,你只存储类的属性。在那里看不到太多开销。

标签: php session


【解决方案1】:

我假设当您保持“序列化\反序列化类”时,您的真正意思是您想要序列化/反序列化会话中的类实例(对象),而不是实际的类定义。使用术语类、实例和对象时要小心,因为它们不可互换并且可能导致混淆。

一个对象可以很容易地存储在 PHP 会话中。 PHP 在请求结束时自动序列化对象,并在下一次请求读取会话数据时反序列化。

session_start();
if (!isset($_SESSION['soap'])) {
    $_SESSION['soap'] = doSoapRequest(); // Returns an instance of your class.
}

当一个对象被序列化时,只有类中定义的变量与类名一起保存。当它被反序列化时,类定义必须可用(即自动加载器或显式包含在脚本中)。反序列化将创建一个与之前序列化的对象具有相同数据的类实例。

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2015-02-20
    • 2012-01-26
    相关资源
    最近更新 更多