Symfony会话避免使用_sf2_attributes

时间:2014-03-24 20:22:39

标签: php session symfony

显然,我保存到Symfony2会话的每个密钥都在一个子密钥下:

$session->set('foo', 'bar');

将导致:

array('_sf2_attributes' => array('foo' => 'bar'));

这是一个问题,因为我正在构建一个与遗留代码交互的应用程序。我想使用Symfony的会话处理程序,但我希望应用程序的旧部分能够从$_SESSION读取。换句话说,我想要

$session->set('foo', 'bar');

$_SESSION['foo'] = 'bar';

具有相同的效果。

我没有看到任何configuration option来实现这一目标。我使用我设置为

的特定会话处理程序
session:
    handler_id: my_app.session_handler 

因此,Symfony使用不同的会话名称不会成为问题。我能想到的唯一解决方案是围绕我的客户会话处理程序(my_app.session_handler)创建一个新的会话处理程序类,检查应用程序是否尝试访问_sf2_attributes,但我认为它非常难看,我不是甚至肯定是否会奏效。

谢谢!

1 个答案:

答案 0 :(得分:0)

这不仅是您必须自己实施的处理程序,而且也应该是您的SessionStorage

默认情况下,Symfony2使用NativeSessionStorage。您应该寻找方法loadSession()。正如您所看到的,它使用$key收到的getStorageKey()初始化会话,该会话在AttributeBag

中使用_sf2_attributes进行初始化

如果您在注入自定义会话存储时遇到问题,请告诉我。