Session 如何在独立类中从DI获取Phalcon会话

Session 如何在独立类中从DI获取Phalcon会话,session,phalcon,Session,Phalcon,我在Phalcon项目中创建了一个类。我想从DI获取会话服务,以便检查是否设置了变量 我试过: $di = Phalcon\DI::getDefault(); echo $di->get("session")->get("user_id"); exit; 但是,它返回的消息是会话已经启动-忽略会话\u start() 我的会话服务是这样注册的: <?php use Phalcon\Mvc\View; use Phalcon\DI\FactoryDefault; use Ph

我在Phalcon项目中创建了一个类。我想从
DI
获取
会话
服务,以便检查是否设置了变量

我试过:

$di = Phalcon\DI::getDefault();
echo $di->get("session")->get("user_id");
exit;
但是,它返回的消息是
会话已经启动-忽略会话\u start()

我的会话服务是这样注册的:

<?php

use Phalcon\Mvc\View;
use Phalcon\DI\FactoryDefault;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Mvc\Url as UrlProvider;
use Phalcon\Mvc\View\Engine\Volt as VoltEngine;
use Phalcon\Mvc\Model\Metadata\Memory as MetaData;
use Phalcon\Session\Adapter\Files as SessionAdapter;  
use Phalcon\Flash\Session as FlashSession;       
use Phalcon\Events\Manager as EventsManager;  

//setup the dependency injection
$di = new FactoryDefault();

//setup the session
$di->set('session', function() {
    $session = new SessionAdapter();
    $session->start();
    return $session;
});
$di->set(
    'session',
    function () {
        $session = new \Phlacon\Session\Adapter\Files();
        $session->start();

        return $session;
     }
 );

尝试将会话注册为非共享组件,如下所示:

<?php

use Phalcon\Mvc\View;
use Phalcon\DI\FactoryDefault;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Mvc\Url as UrlProvider;
use Phalcon\Mvc\View\Engine\Volt as VoltEngine;
use Phalcon\Mvc\Model\Metadata\Memory as MetaData;
use Phalcon\Session\Adapter\Files as SessionAdapter;  
use Phalcon\Flash\Session as FlashSession;       
use Phalcon\Events\Manager as EventsManager;  

//setup the dependency injection
$di = new FactoryDefault();

//setup the session
$di->set('session', function() {
    $session = new SessionAdapter();
    $session->start();
    return $session;
});
$di->set(
    'session',
    function () {
        $session = new \Phlacon\Session\Adapter\Files();
        $session->start();

        return $session;
     }
 );
注意,
$di->set()


或者使用
$di->set()
而不是
$di->setShared()
修复方法是使用
setShared
将服务设置为共享,谢谢。查看我的更新-我的会话或多或少以相同的方式注册。因此,在注册和启动会话之前,您的应用程序中正在启动会话。尝试将DI中的会话注册放在bootstrap code或services.php文件的顶部-看看这是否有助于查看我的编辑-不幸的是,这没有帮助。在代码的许多其他部分中,我在获取会话方面没有问题,因此不确定要做什么!在我看来,当我调用
$di->get(“session”)->get(“user_id”)
在我的代码中,因为这表示会话已经启动(应该是从di注册中启动时开始)