【问题标题】:Symfony session avoid _sf2_attributesSymfony 会话避免 _sf2_attributes
【发布时间】:2014-05-02 10:10:59
【问题描述】:

显然我保存到 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 但我认为它非常难看,我什至不确定是否会工作。

谢谢!

【问题讨论】:

    标签: php session symfony


    【解决方案1】:

    这不仅是您必须自己实现的处理程序,还应该是您的SessionStorage

    默认情况下,Symfony2 使用NativeSessionStorage。您应该寻找方法loadSession()。如您所见,它使用从getStorageKey() 接收的$key 初始化会话,此处使用_sf2_attributes 初始化-在AttributeBag

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

    【讨论】:

    • 谢谢。我检查了这个选项,但我不确定这是我能做的最好的。现在我对 Session API 已经相当熟悉了,但是因为整个系统都使用变量引用,所以似乎很难实现我想要的。
    • 终于想出了这个:gist.github.com/tcz/9756112 丑得要命,但有效。我在会话配置storage_id 键中使用它,该键没有很好的记录。谢谢!
    • 我有类似的问题,但这次使用 Memcached ,在我的配置文件中我有 handler_id: session.handler.memcached ,它在 services 中定义,但我的问题是会话没有存储到 memcached 服务器使用 $session->set('foo', 'bar');有什么帮助吗?
    猜你喜欢
    • 2019-03-31
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多