在遗留应用程序和 Symfony2 之间桥接会话数据

Bridge session data between legacy Application and Symfony2

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

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

我从 Symfony 站点找到了这个:http://symfony.com/doc/current/cookbook/session/php_bridge.html http://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,其中 session_start() 在 symfony 被实例化之前被调用,则应该使用它。我还没有测试过这个,但它可能仍然可以让它们 运行 并行,但你最终可能不得不对会话处理程序进行一些自定义。

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