在旧版应用程序和Symfony2之间桥接会话数据


Bridge session data between legacy Application and Symfony2

抱歉,如果在我找不到之前已经问过这个问题。我找不到我想要的答案。

有一个遗留的应用程序,我正在使用Symfony2重建,不幸的是,我需要并行运行一段时间,直到我可以完成重建整个系统。我需要让symfony能够访问遗留的会话数据才能运行。

我从Symfony网站上找到了这个:http://symfony.com/doc/current/cookbook/session/php_bridge.htmlhttp://symfony.com/doc/current/components/http_foundation/session_php_bridge.html

但是我不明白是否需要进行配置,以及我应该在哪里调用会话启动以及如何从我的新应用程序访问会话数据。

我会把symfony中给出的例子放在我创建的每个控制器中吗?

use Symfony'Component'HttpFoundation'Session'Session;
use Symfony'Component'HttpFoundation'Session'Storage'PhpBridgeSessionStorage;
// legacy application configures session
ini_set('session.save_handler', 'files');
ini_set('session.save_path', '/tmp');
session_start();
// Get Symfony to interface with this existing session
$session = new Session(new PhpBridgeSessionStorage());
// symfony will now interface with the existing PHP session
$session->start();

似乎应该有一种方法可以集中它。

更新 手册给出了一个例子,但它没有说明它是否应该进入控制器、服务、实体或配置的某个地方。

我尝试在控制器中使用示例代码,当我对$session进行print_r时,我没有看到任何旧会话数据。

**

提前谢谢。

你看到的是symfony使用的组件的示例代码。Symfonys 会话由 app/config.yml 中设置的参数初始化。组件指令仅在 symfony 之外使用该组件时才有效。你想要的那个是第一个。但是使用:

#app/config.yml
framework:
    session:
        storage_id: session.storage.php_bridge
        handler_id: session.handler.native_file

如果你在另一个应用程序中包含symfony,在symfony实例化之前调用session_start(),则使用。我还没有对此进行测试,但让它们并行运行可能仍然可以工作,但您最终可能不得不对会话处理程序进行一些自定义。

也许考虑使用 pdo 会话处理程序:http://symfony.com/doc/current/cookbook/configuration/pdo_session_storage.html