【问题标题】:Where/How does Symfony2 serializes and writes its session data?Symfony2 在哪里/如何序列化和写入其会话数据?
【发布时间】:2013-03-08 05:29:34
【问题描述】:

概述:

我有一个基于 Symfony1 构建的应用程序,但我正在使用 Symfony2 构建新部分。我已经移动了 Symfony2 上的登录/注销操作,并使 Symfony1 从 Symfony2 读取会话数据。通过告诉 Symfony2 将其会话数据写入默认的 PHP $_SESSION 中,效果很好,一切都在数组中,Symfony1 可以读取数据并自动登录我的用户。

现在我将 Symfony1 和 Symfony2 应用程序移到各自的 VM 上。因此,我没有使用 PHP $_SESSION 编写会话,而是将会话保存在 MongoDB 中(通过 MongoDbSessionHandler)。但是现在当我从 Symfony1 应用程序中读取会话数据时,我最终会得到这样的结果:

_sf2_attributes|a:0:{}_sf2_flashes|a:0:{}_sf2_meta|a:3:{s:1:"u";i:1362655964;s:1:"c";i:1362655964;s:1:"l";s:1:"0";}

而且它绝对不是不可序列化的。 Symfony2 似乎以自己的方式序列化数据,我猜这些 _sf2_* 东西是元数据包。问题是我找不到这个序列化发生的地方。为了能够反序列化它,我需要找到它是如何序列化的。我找到的最近的地方是在 SessionHandlerProxy:

public function write($id, $data)
{
    return (bool) $this->handler->write($id, $data);
}

这里传递的$data包含了序列化的数据,但是我在代码中找不到它被调用的地方。

运气好吗?

【问题讨论】:

    标签: mongodb session serialization symfony


    【解决方案1】:

    MongoDbSessionHandler 在此处设置为 PHP 会话保存处理程序:https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php#L349-L370

    session_start()(https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/Session/Storage/NativeSessionStorage.php#L146)实际上是读取session文件/Mongo的内容并创建全局$_SESSION变量:http://www.php.net/manual/en/function.session-start.php

    看看 PHP 的 session_decode 函数:http://www.php.net/manual/en/function.session-decode.php - 这可能就是你要找的。​​p>

    【讨论】:

    • AAAAaaaaahhhhh。我正在寻找的是会话解码功能!其余的我都有,但我无法理解奇怪的序列化。谢谢!
    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2012-03-12
    相关资源
    最近更新 更多