php会话中保存对象

bob*_*obo 6 php session serialization

我正在尝试保存一个对象$_SESSION,但以下内容:

<?php

$user = db->load( $username, $pass ) ;
$_SESSION[ 'user' ] = $user ;

# on subsequent page loads:
$user = $_SESSION[ 'user' ] ; #retrieve the user from session
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.

该脚本尝试执行方法或访问不完整对象的属性.请确保加载了_before_ unserialize()被调用的对象的类定义"User",或者提供__autoload()函数来加载类定义

除非你使用serialize():

<?php

$user = db->load( $username, $pass ) ;
$_SESSION[ 'user' ] = serialize( $user ) ;

# on subsequent page loads:
$user = unserialize( $_SESSION[ 'user' ] ) ; #retrieve the user from session
Run Code Online (Sandbox Code Playgroud)

我假设需要序列化,因为会话信息已保存到磁盘.但PHP不应该足够智能自行序列化东西吗?

并且使用serialize/_ unserialize _,这现在可靠吗?或者__serialize()我的PHP类中是否需要一个方法?

New*_*Guy 4

__serialize()如果您的对象需要在序列化之前执行某些操作,则您的类中将需要。例如,如果它引用了一个打开的文件,并且该文件需要在序列化之前正确关闭。

  • 在这种情况下,您将使用 __sleep 和 __wakeup &lt; http://br2.php.net/manual/en/function.serialize.php &gt; (2认同)
  • 抱歉,这就是我的意思,没有名为 __serialize() 的 php 魔术方法。 (2认同)