【发布时间】:2016-06-06 17:05:16
【问题描述】:
我正在设置从旧代码库迁移到 Symfony 代码库的能力,并且我正在尝试在两个应用程序之间共享旧会话变量。
我目前可以在app_dev.php 中使用var_dump($_SESSION),而user_id 密钥来自旧版应用程序。但是,当我在控制器中运行以下命令时,我没有得到任何会话变量:
var_dump($request->getSession()->all());
所以澄清一下,我目前可以访问$_SESSION['user_id'],所以会话在应用程序之间成功共享,但 Symfony 会话对象及其参数包不包含旧密钥。
我的目标:
-
user_id密钥在$request->getSession()调用中可用 - 此处提供所有其他密钥
我的问题:
我已经尝试过PHP Session bridge,但我认为这不应该达到我想要的效果。添加 bridge 参数不仅在我的 Symfony 应用程序中没有任何作用,而且从我的read 来看,这意味着以某种方式在其他遗留应用程序中使用,而不是在 Symfony 中。
Symfony 会话在特殊的 'Bags' 中存储属性等数据,这些数据使用 $_SESSION 超全局中的键。这意味着 Symfony 会话不能访问 $_SESSION 中可能由遗留应用程序设置的任意键,尽管所有 $_SESSION 内容将在保存会话时保存。 [来自Integrating with legacy sessions]
我还查看了TheodoEvolutionSessionBundle,但这是旧的,没有得到积极的支持或工作,并且不适用于 Symfony 3。
我注意到 Symfony 将其会话数据存储在 $_SESSION['_sf2_attributes'] 下,所以我最初的想法是在 app_dev.php 中执行此操作:
$_SESSION['_sf2_attributes']['user_id'] = $_SESSION['user_id'];
这显然是错误的做法,因为我也必须在那里打电话给session_start()。
我如何将旧的 $_SESSION 数据迁移到 Symfony 的 Session 对象中? Symfony 是否有内置的东西可以帮助解决这个问题或可用的捆绑包?如果没有,在哪里我可以将我的自定义 $_SESSION['_sf2_attributes'] 'hack' 放在正确的位置来处理所有这些密钥的迁移?
【问题讨论】:
-
这里有这个问题的更新答案:stackoverflow.com/questions/38669383/…
-
很好,谢谢!那应该进去。