1

描述

我正在尝试将一个自定义对象添加ReviewHolder到会话中。这是在“审查”控制器中完成的。该类ReviewHolder包含在classes/controller/review.php文件中。我正在使用 Kohana 3.2 版。

编码

$session = Session::instance();
$reviewholder = $session->get('reviewholder');
if($reviewholder == null) {
    $session->set('reviewholder', new ReviewHolder());
}

问题

问题是,在我执行上述代码后,会话被破坏,几乎整个网站都停止正常运行。这是每个页面上的错误消息:

Session_Exception [ 1 ]: Error reading session data.

奇怪的部分

从“review”控制器加载的所有页面仍然正常运行!看起来上面的代码搞乱了应用程序中的所有其他会话......

调试

我已经调试了会话以查看是否使用以下代码正确设置了对象:

echo Debug::vars($session->get('reviewholder'));

这正确显示了对象,因此它已在会话中设置。


有人可以帮我吗?谢谢!

4

2 回答 2

1

会话文件中的内容并不重要。

我所知道的是,您只能存储在会话中序列化的对象。

序列化后,您可以将其存储在会话中并再次使其成为对象以供以后使用。您可以反序列化序列化的对象。

希望这可以帮助!

于 2012-10-08T23:03:25.327 回答
0

在会话中存储自定义对象时,我发现以下内容对我有用:

  1. 确保您的会话目录在 PHP 中设置正确,即。目录存在,权限允许您的网络服务器写入目录

  2. 通过添加如下行强制将对象的类加载到 bootstrap.php 中: require_once( Kohana::find_file('classes','Library/MyClass') );

在这两个步骤之后,我不再看到会话损坏异常

于 2014-01-20T21:22:46.893 回答