【发布时间】:2008-11-07 03:30:31
【问题描述】:
是否有内置方法可以知道给定会话变量是否为序列化对象?假设我检索了一个像 $_SESSION['foo'] 这样的值,但我不知道它最初是一个字符串还是一个序列化对象。有什么方法可以检查,或者一旦序列化 PHP 是否只是将字符串视为字符串?
【问题讨论】:
标签: php serialization session-variables
是否有内置方法可以知道给定会话变量是否为序列化对象?假设我检索了一个像 $_SESSION['foo'] 这样的值,但我不知道它最初是一个字符串还是一个序列化对象。有什么方法可以检查,或者一旦序列化 PHP 是否只是将字符串视为字符串?
【问题讨论】:
标签: php serialization session-variables
您必须在将对象放入会话之前手动序列化对象,这是一个很常见的误解。事实并非如此。您可以简单地将对象实例分配给$_SESSION 中的插槽,PHP 会在请求之间自动为您序列化和反序列化它。
【讨论】:
session_register 是一种陈旧且已弃用的会话使用方式 - 远离它。
字符串是字符串是字符串。我认为你能做的最好的就是尝试反序列化它,如果它有效,它就有效。如果没有,那就没有。
唯一的其他选择是使用正则表达式来查看它是否“看起来”像一个序列化对象。不过,在上面运行unserialize() 可能会更容易。
【讨论】:
你可以使用 is_a ...把它从会话中拉出来看看,你只需要知道要检查的类名。
if (is_a($_SESSION['foo'], 'UserInfoObject')) {
// We have one
}
看起来PHP5有一个更简单的方法:
if ($_SESSION['foo'] instanceof UserInfoObject) {
// We have one
}
【讨论】: