如何在Symfony3应用程序中阅读Zend2会话

罗伯特

我有两个应用程序。一个旧的用Zend Framework编写,而新的Symfony 3.1则应该与一个旧的共享会话。

在旧的应用程序中,使用本机文件存储,因此当我进入app_dev.php并编写时session_start(); var_dump($_SESSION);,在会话中看到“ __ZF”键,我需要在symfony3应用程序中对其进行访问。

显然,以上代码仅用于检查会话是否在域内共享。

在symfony3应用程序中,我尝试订阅该事件KernelEvents::REQUEST,在那里我想从请求中获取原始会话,并使用来自Zend2的参数创建一个包。

class SessionSubscriber implements EventSubscriberInterface
{
    public function onKernelRequest(GetResponseEvent $event)
    {

        if ($event->isMasterRequest() && true == $event->getRequest()->hasSession()) {
            var_dump($event->getRequest());
            $event->getRequest()->getSession()->registerBag(new ZendSessionBag());
            var_dump($event->getRequest()->getSession()->getBag('zf'));
            exit;
            return;
        }
    }
    public static function getSubscribedEvents()
    {
        return array(
            KernelEvents::REQUEST => (array('onKernelRequest', 127))
        );
    }
}

但是我无权访问来自的原始会话数据 $event->getRequest();

到目前为止,这就是我的书包的样子。据我了解,我应该可以使用initialize()方法访问原始会话数据

class ZendSessionBag implements SessionBagInterface
{
    private $storageKey;
    private $sessionData;


    public function __construct($storageKey = '__ZF')
    {
        $this->storageKey = $storageKey;
    }

    public function getName()
    {
        return 'zf';
    }

    public function initialize(array &$array)
    {
        var_dump($array); // here should be raw $_SESSION data
        $this->sessionData = &$array;
    }

    public function getStorageKey()
    {
        return $this->storageKey;
    }

    public function clear()
    {
        $this->sessionData = [];
    }
}

因此,当我获得会话并获得名为“ zf”的包时,我将有权访问数据。

这也是我关于会话的配置:

session:
        storage_id: session.storage.php_bridge
        handler_id:  session.handler.native_file
        save_path:   "/var/lib/php5/sessions"

任何帮助,将不胜感激。

罗伯特

我设法使它起作用。

首先,我更改了配置:

我已经更改了保存路径并删除了本地处理程序:

session:
        save_path:   "/var/lib/php5/sessions"

然后,我更改了EventSubscriber:

class SessionSubscriber implements EventSubscriberInterface
{
    /**
     * @param GetResponseEvent $event
     */
    public function onKernelRequest(GetResponseEvent $event)
    {
        $bag = null;
        $session = $event->getRequest()->getSession();

        try
        {
            $bag = $session->getBag('zf');
        }
        catch (\InvalidArgumentException $e)
        {
            $bag = new NamespacedAttributeBag("__ZF");
            $bag->setName("zf");
            $session->registerBag($bag);

            $session->start();
        }
        $bag->set('userId', isset($_SESSION['Zend_Auth']->storage) ? $_SESSION['Zend_Auth']->storage : null);
    }

    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return array(
            KernelEvents::REQUEST => (array('onKernelRequest', 127))
        );
    }
}

从Zend导入类Zend\Stdlib\ArrayObject之后,我可以访问我想要放入包中的变量zf

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Ratchet websocket 应用程序中使用带有 symfony 会话的旧会话 ($_SESSION)

来自分类Dev

如何在Ionic 2应用程序中终止Google OAuth会话(通过Firebase)?

来自分类Dev

如何在基于 GAE 的应用程序中更新 webapp2_extras 会话

来自分类Dev

如何在Symfony2控制台应用程序中添加辅助输出?

来自分类Dev

如何在现有Symfony2应用程序中实现Sylius OrderBundle

来自分类Dev

如何在Symfony2应用程序中创建控制台命令

来自分类Dev

如何在 Symfony2 应用程序中访问 /wkhtmltox/bin/wkhtmltopdf

来自分类Dev

如何在Zend2中的另一个命名空间中访问模型?

来自分类Dev

如何在我们的应用程序中给出zend库路径?(在zend Framework 2.3中)

来自分类Dev

如何在Apache服务器中配置Zend应用程序

来自分类Dev

如何在 symfony3 中从相同的表单访问 2 个表?

来自分类Dev

如何在Symfony3中解析自动生成的类

来自分类Dev

如何在 symfony3 中添加元标记?

来自分类Dev

如何在GNOME 3中编辑“应用程序”菜单?

来自分类Dev

如何在GNOME 3中编辑“应用程序”菜单?

来自分类Dev

在 Symfony 应用程序之间共享会话

来自分类Dev

如何测试我的应用程序phpunit中的每个模块-Zend Framework 2

来自分类Dev

Zend Framework 2中的宁静应用程序

来自分类Dev

在Zend 2应用程序中通过邮件报告错误

来自分类Dev

如何在AngularJS应用程序中保留会话数据?

来自分类Dev

如何在两个窗口之间的Wpf应用程序中维护会话?

来自分类Dev

如何在Android Studio中运行应用程序而不会终止并重新启动会话?

来自分类Dev

如何在核心Java应用程序中维护会话超时?

来自分类Dev

在Rails应用程序中阅读PDF

来自分类Dev

在Struts 2 Web应用程序中检查会话值

来自分类Dev

oauth2 django应用程序中的用户会话

来自分类Dev

如何部署Symfony应用程序?Symfony2

来自分类Dev

如何修复Web应用程序中的会话固定问题

来自分类Dev

如何使应用程序显示在当前会话中

Related 相关文章

  1. 1

    如何在 Ratchet websocket 应用程序中使用带有 symfony 会话的旧会话 ($_SESSION)

  2. 2

    如何在Ionic 2应用程序中终止Google OAuth会话(通过Firebase)?

  3. 3

    如何在基于 GAE 的应用程序中更新 webapp2_extras 会话

  4. 4

    如何在Symfony2控制台应用程序中添加辅助输出?

  5. 5

    如何在现有Symfony2应用程序中实现Sylius OrderBundle

  6. 6

    如何在Symfony2应用程序中创建控制台命令

  7. 7

    如何在 Symfony2 应用程序中访问 /wkhtmltox/bin/wkhtmltopdf

  8. 8

    如何在Zend2中的另一个命名空间中访问模型?

  9. 9

    如何在我们的应用程序中给出zend库路径?(在zend Framework 2.3中)

  10. 10

    如何在Apache服务器中配置Zend应用程序

  11. 11

    如何在 symfony3 中从相同的表单访问 2 个表?

  12. 12

    如何在Symfony3中解析自动生成的类

  13. 13

    如何在 symfony3 中添加元标记?

  14. 14

    如何在GNOME 3中编辑“应用程序”菜单?

  15. 15

    如何在GNOME 3中编辑“应用程序”菜单?

  16. 16

    在 Symfony 应用程序之间共享会话

  17. 17

    如何测试我的应用程序phpunit中的每个模块-Zend Framework 2

  18. 18

    Zend Framework 2中的宁静应用程序

  19. 19

    在Zend 2应用程序中通过邮件报告错误

  20. 20

    如何在AngularJS应用程序中保留会话数据?

  21. 21

    如何在两个窗口之间的Wpf应用程序中维护会话?

  22. 22

    如何在Android Studio中运行应用程序而不会终止并重新启动会话?

  23. 23

    如何在核心Java应用程序中维护会话超时?

  24. 24

    在Rails应用程序中阅读PDF

  25. 25

    在Struts 2 Web应用程序中检查会话值

  26. 26

    oauth2 django应用程序中的用户会话

  27. 27

    如何部署Symfony应用程序?Symfony2

  28. 28

    如何修复Web应用程序中的会话固定问题

  29. 29

    如何使应用程序显示在当前会话中

热门标签

归档